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 )
должна пытаться выйти за пределы текущего положения файла.