Подскажите плз. вот есть функция по поиску определенной строки в файле: Код (Text): bool FindStringInFile(wchar_t * InFile,wchar_t * InString,int strLen) { FILE* pif; wchar_t * current_str = new wchar_t[strLen]; memset(current_str,0,strLen); if(!(pif=_wfopen(InFile, L"r"))) { printf("Open log_file failed.\n"); return false; } while(!(feof(pif))) { fgetws(current_str, strLen+1,pif); if (ferror(pif)) { printf("error"); return false; } if ((wcsstr(current_str,InString))!=NULL) { fclose(pif); return true; } } fclose(pif); return false; } как ее можно преобразовать так чтобы она еще записывала в файл после найденной строчки другую строчку?
я вот так попробовал, но fputws возвращает ошибку: Код (Text): FILE* pif; wchar_t * current_str = new wchar_t[strLen]; memset(current_str,0,strLen); if(!(pif=_wfopen(InFile, L"a+"))) { printf("Open log_file failed.\n"); return false; } while(!(feof(pif))) { fgetws(current_str, strLen+1,pif); if (ferror(pif)) { printf("error"); return false; } if ((wcsstr(current_str,InString))!=NULL) { fputws(L"\nснова\n",pif); fclose(pif); return true; } } fclose(pif); return false; в чем я ошибся?
вроде вставляет но если ставить после первой строчки то он подтирает вторую а как можно сделать так чтобы вставлялась еще одна строчка?
Вставить в середину файла, так чтобы он раздвинулся, нельзя. Нужно перезаписывать от места вставки до конца файла.
Приблизительно читаешь блок в память, потом точно пишешь то что надо, потом приблизительно столько, сколько влезет в оставшееся от ранее прочитанного место. И дальше по кругу. Или просто всё подряд в новый файл.
чет я подумал и понял что мне как-то трудновато этот алгоритм дается....подскажите плз пару строк...вот я нашел нужную строчку, как мне скопироть то что было до нее в новый файл, потом записать то что мне нужно и скопировать то что идет дальше?
BreakHeart не проще ли прочесь все содержимое файла в буффер, далее проделать над ним эту вставку строки (ну, что тебе там нужно, ессно, при необходимости расшырив его путем его реаллокации), и далее записать полностью все эти данные в файл? ps: на с++ с STL можешь взять std::vector и не париться с перевыделениями памяти.