Попытка вставить строку в середине файла, начиная с его конца.Может вставляться в fstream, но не в iostream
Следующий код работает с fstream, но не с iostream (в данном случае выходная строка равна входной):
// File contents: "abcdefghijklmnopqrstxyz"; "uvw" missing
// 1 - OK
//fstream iofs(fPath, ios_base::in | ios_base::out);
// 2 - Same output
filebuf fileBuffer;
iostream iofs(&fileBuffer); // generic output stream
fileBuffer.open(fPath.c_str(), ios_base::in | ios_base::out | ofstream::app);
iofs.rdbuf(&fileBuffer);
iofs.seekg(0, ios_base::end);
iofs.seekp(0, ios_base::end);
for(int i = 1; i < 20; ++i)
{
iofs.seekg(-i, std::ios_base::end);
char c = char(iofs.peek());
if(c == 't') {
iofs.seekp(-i + 1, std::ios_base::end);
iofs << "uvw"; // add missing token
iofs << "xyz"; // append pre-existing token
break;
}
}
Выход:
Случай 1: Begin = abcdefghijklmnopqrstxyz; Результат = abcdefghijklmnopqrstuvwxyz
Случай 2: Begin = abcdefghijklmnopqrstxyz; Результат = abcdefghijklmnopqrstxyz
Я делаю что-то неправильно или просто не могу сделать вставку в iostream?
Вы проверяете содержимое потока в конце или в файле? Просто угадать здесь, но, возможно, fstream делает неявный флеш при уничтожении или некоторая синхронизация файлов, а iostream - нет. Вы можете попробовать флеш в конце. – Hayt