C ++ перезаписывает данные в файле в определенной позиции - PullRequest
9 голосов
/ 04 сентября 2011

У меня проблемы с перезаписью некоторых данных в файле на 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 ]

11 голосов
/ 04 сентября 2011

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

4 голосов
/ 04 сентября 2011

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

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

fstream::app говорит, что он должен переходить в конец файла перед каждой операцией вывода, поэтому даже если вы явно ищете позицию, место записи принудительно заканчивается до конца, когда вы делаете write() (то есть 1006 *).

ср. http://www.cplusplus.com/reference/iostream/fstream/open/

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...