изменение части файла в C ++ - PullRequest
0 голосов
/ 11 октября 2009

Предположим, у меня есть файл 'emp.txt', содержимое которого

EmpNo.   Name   Phone No.  Salary

1         ABC    123        321

2         CBA    456        543

Теперь я хочу изменить номер телефона. 1-й сотрудник один. Когда я попытался использовать ios: ate, все содержимое файла было удалено, а новый телефон - нет. вставили. Как я могу решить это?

Ответы [ 4 ]

2 голосов
/ 11 октября 2009

Если вы открываете файл только для вывода, библиотека обычно усекает существующий файл. Чтобы изменить существующее содержимое файла, проще всего открыть его в режиме «чтение / запись», чтобы можно было искать правильную позицию и частично перезаписывать его содержимое.

Попробуйте что-то вроде:

std::fstream filestream( "emp.txt", std::ios_base::in | std::ios_base::out );

или если вы используете потоки C:

FILE* f = fopen( "emp.txt", "r+" );
1 голос
/ 11 октября 2009

Смена режима открытия потока

Просмотреть все возможные Режимы здесь

0 голосов
/ 11 октября 2009

В Windows MapViewOfFile () отлично работает в особом случае, когда вы просто перезаписываете цифры на месте, а хвост файла не нужно перемещать. Если вам НЕОБХОДИМО переписать весь файл, есть запись в Википедии «Транзакционная NTFS» для полного спокойствия.
Карты памяти в моем опыте работают очень хорошо. Если ваш процесс падает, обычно последний записанный вами байт все равно будет корректно записан на диск, поскольку Windows точно знает, какие страницы загрязнены.
Какие ПРЕДЛОЖЕНИЯ "дополняют ваши записи", чтобы даже типичные изменения адреса могли быть выполнены без перемещения хвоста файла.

0 голосов
/ 11 октября 2009

Для вашего примера я думаю, что было бы лучше просто загрузить весь файл, внести изменения, а затем записать обратно весь файл. Если файл большой, то нет.

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