Как я вставляю и удаляю некоторые символы посреди файла?

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

fopen () и fdopen () просто позволяют добавлять в конце.

Есть ли какой-либо простой метод или существующая библиотека, которые позволяют эти действия?

6
задан Stephen 23 August 2011 в 20:08
поделиться

3 ответа

Простого метода не существует. Вам придется делать это вручную. Например:

  1. Прочитать фрагмент, который вы хотите вставить раньше, в память
  2. Перейти вперед к новой позиции
  3. Записать фрагмент, который вы только что прочитали, в новую позицию
  4. Перейти назад туда, где вы хотите вставить
  5. Напишите новые данные.
7
ответ дан 8 December 2019 в 12:58
поделиться

Как вам уже сказали другие, вы должны делать это вручную и использовать fseek, чтобы добраться до места, в котором вам нужно вставить или добавить символы. Вы можете легко добавить новые символы в середине, сделав следующее:

  1. Перейдите к последнему байту файла и сохраните старый размер файла.
  2. Перейдите к месту, куда вы хотите вставить новые символы (скажем, это позиция): fread (старый размер файла - позиция) байт, и сохраните их в буфере.
  3. fперейдите к позиции снова.
  4. fзапишите новые символы.
  5. fзапись в буфер, который вы ранее прочитали.

Если вы хотите удалить символы в середине, то это более сложная задача. На самом деле вы не можете сделать файл короче. У вас есть две возможности: в первом случае вы просто

  1. открываете файл и читаете его, пропуская символы, которые хотите удалить, и сохраняете их в буфере
  2. закрываете и снова открываете файл с помощью "b", так что его содержимое стирается,
  3. записываете буфер и закрываете файл.

Во втором варианте вы:

  1. считываете в буфер символы, стоящие впереди тех, которые вы хотите удалить.
  2. ищете начало символов, которые вы хотите удалить
  3. записываете буфер.
  4. Обрезать оставшуюся часть файла.

Пункт четыре - "хитрый", потому что нет стандартного (переносимого) способа сделать это. Одна из возможностей - использовать системные вызовы операционной системы для усечения файла. Другая, более простая возможность - просто записать EOF в пункте 4. Файл будет, вероятно, больше, чем должен быть, но это поможет.

7
ответ дан 8 December 2019 в 12:58
поделиться

Используйте функцию fseek , чтобы переместить указатель файла в соответствующее место файла, а затем вы можете выполнить запись в этом месте. Но для этого вы должны знать, сколько байтов от конца или начала файла вы предпочитаете для записи.

3
ответ дан 8 December 2019 в 12:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: