Запись в определенную позицию в файле - PullRequest
1 голос
/ 25 января 2011

У меня есть

fstream output;
output.open(fname, ios::out | ios::trunc); //file
for (int i=0; i<flength; i++)
    output.put('1');

Я хочу перезаписать данные разной длины в разные места в файле.Данные - это символы.

Допустим, есть 111111111111111111111111111111111, я хочу написать

11   111111333111!!!!!!1    11441111

Ответы [ 5 ]

2 голосов
/ 25 января 2011

Вы не можете «вставить» вещи в середину файла - единственные операции на месте, которые вы можете сделать, это записать точно такое же количество байтов, которое вы пытаетесь перезаписать, т.е. записать без изменения длины файла.Если вам нужно написать строку различной длины (как в вашем примере), вам нужно переписать весь файл с того места, где вы завершили операцию записи (сохранить оригинал в буфере и переписать).

2 голосов
/ 25 января 2011

Используйте <a href="http://www.cplusplus.com/reference/iostream/ostream/seekp/" rel="nofollow">seekp()</a> для установки позиции записи в потоке файла.

0 голосов
/ 27 февраля 2017

Лучший способ - переписать весь файл в другой файл после внесения необходимых изменений.

std::ifstream fin("yourfile.txt");
remove("yourfile.txt");

Скопируйте поток перед удалением вашего файла. Это может помочь вам сохранить имя файла.

0 голосов
/ 25 января 2011

Вы можете использовать seekp , чтобы установить позицию указателя и записать в определенную позицию в файле, например,

 output.seekp(10);
 output.put('!');
0 голосов
/ 25 января 2011

Проверьте ostream::seekp, здесь . Поместите указатель файла в нужное место перед записью.

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