C++ перезапись данных в файле в определенной позиции

У меня проблема с перезаписью некоторых данных в файле на c++. код, который я использую, -

 int main(){
   fstream fout;
   fout.open("hello.txt",fstream::binary | fstream::out | fstream::app);
   pos=fout.tellp();
   fout.seekp(pos+5);
   fout.write("####",4);
   fout.close();
   return 0;

}

проблема даже после использования seekp, данные всегда записываются в конце.Я хочу написать его на определенной должности. И если я не добавлю fstream:: app, содержимое файла будет стерто. Спасибо.

2 ответов


проблема заключается в fstream::app - Он открывает файл для добавления, то есть все записи идут в конец файла. Чтобы избежать удаления содержимого, попробуйте открыть с помощью fstream::in также, что означает открыть с fstream::binary | fstream::out | fstream::in.


вы хотите что-то вроде

fstream fout( "hello.txt", fstream::in | fstream::out | fstream::binary );
fout.seek( offset );
fout.write( "####", 4 );

fstream::app говорит ему переместиться в конец файла перед каждой операцией вывода, поэтому, даже если вы явно ищете позицию, местоположение записи принудительно завершается, когда вы делаете write() (то есть seekp( 0, ios_base::end );).

cf. http://www.cplusplus.com/reference/iostream/fstream/open/

еще одна вещь, чтобы отметить, что, так как вы открыли файл с fstream::app, tellp() должен вернуть конец папка. Так что seekp( pos + 5 ) должна пытаться выйти за пределы текущего положения файла.