Как удалить байты из файла в C или C ++? - PullRequest
1 голос
/ 22 октября 2019

Я гуглил это часами ... читал, читал и читал, и все же ничего, с чем я сталкиваюсь, кажется, не отвечает на этот простой вопрос: В программировании на C или C ++: у меня есть файл, он содержит "Привет, мир". Я хочу удалить «мир» (например, нажав Backspace в текстовом редакторе), а затем сохранить файл. Как мне это сделать?

Я знаю, что файлы streams ( отлично информация об этом здесь! ), что дКажется, у меня нет способа удалить элементы из файла, скажем так, и я изучил все функции, связанные с файлами, в stdio.h: http://www.cplusplus.com/reference/cstdio/fopen/.

Мне кажется, чтопоэтому файлы и потоки НЕ похожи на массивы: я не могу просто удалить байт из файла! Скорее (я полагаю?) Мне нужно создать целый новый файл и скопировать весь оригинальный файл в новый файл без частей, которые я хочу удалить? Это тот случай?

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

Related

Ответы [ 3 ]

1 голос
/ 22 октября 2019
1 голос
/ 22 октября 2019

Предположим, ваш исходный файл "data.txt". Как часть вашего кода, откройте новый временный файл с именем «data.txt.tmp» и начните записывать в него содержимое из исходного файла. После записи данных замените исходный файл новым.

0 голосов
/ 22 октября 2019

Вы можете использовать карту памяти из исходного файла и скопировать нужные блоки данных в другую карту памяти поверх целевого файла. Это простой и быстрый способ (см. http://man7.org/linux/man-pages/man2/mmap.2.html)

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