Есть ли основной способ удалить что-то из открытого файла - PullRequest
2 голосов
/ 21 августа 2009

Когда вы открываете файл .txt с помощью fopen Есть ли способ удалить некоторые строки в файле без перезаписи.

Например, это текстовый файл, который я открою с помощью fopen ();

-------------
1 some string
2 SOME string
3 some STRING
-------------

я хочу удалить строку, первый символ которой равен 2, и изменить ее на

-------------
1 some string
3 some STRING
-------------

Мое решение; Сначала прочитайте все данные и сохраните их в строковых переменных. Затем откройте тот же файл в режиме w. И снова записать данные, кроме строки 2. (Но это не логично, я ищу более простой путь в C ...) (я надеюсь, что мой английский не был проблемой)

Ответы [ 3 ]

6 голосов
/ 21 августа 2009

Самым простым способом может быть отображение в памяти всего файла с помощью mmap . С помощью mmap вы получаете доступ к файлу в виде длинного буфера памяти, который вы можете изменять, отражая изменения на диске. Затем вы можете найти смещение этой строки и переместить весь хвост файла на несколько байтов назад, чтобы перезаписать строку.

3 голосов
/ 21 августа 2009

Вы не должны перезаписывать файл, лучше открыть другой (временный) файл, записать содержимое в него, а затем удалить старый файл и переименовать файл. Так что безопаснее, если возникнут проблемы. Я думаю, что самый простой способ -

  1. читать весь файл
  2. изменить содержимое в памяти
  3. обратная запись во временный файл
  4. удалить оригинальный файл
  5. переименование временного файла в исходный файл

Звучит не слишком нелогично для меня ..

1 голос
/ 21 августа 2009

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

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