Как обрезать файл в Visual C ++? - PullRequest
1 голос
/ 17 мая 2011

У меня следующий случай. У меня есть большой файл, скажем, 1 КБ. Я хочу прочитать первые 100 байтов, а затем удалить 100 байтов данных чтения из файла и затем прочитать следующие 100 байтов. Чтобы прочитать 100 байтов это нормально, но как мне удалить 100 байтов из файла?

Ответы [ 3 ]

4 голосов
/ 17 мая 2011

Обычно это делается в несколько шагов:

  1. Переименование исходного файла.
  2. Запишите нужные данные в новый файл с исходным именем.
  3. Удалите старый файл с временным именем, содержащим данные, которые вам больше не нужны.

Таким образом, если что-то пойдет не так, вы можете просто восстановить исходный файл, который вы переименовали. Перемещение файла из одного места в другое также реализовано таким образом.


Однако, если вы не хотите этого делать, функция SetEndOfFile - это еще одна жизнеспособная опция для усечения содержимого файла на месте. Из документации:

Устанавливает физический размер файла для указанного файла в текущую позицию указателя файла.

Физический размер файла также называется концом файла. Функцию SetEndOfFile можно использовать для усечения или расширения файла.

3 голосов
/ 17 мая 2011

Это не будет называться усечением ; этот термин относится к удалению данных с конца, а не с начала. Я не знаю ни о какой операционной системе, где это возможно, кроме как путем копирования содержимого файла в новый файл, начиная с сотого байта.

1 голос
/ 17 мая 2011

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

Удаление данных в верхней или средней части файла требует записи нового файла, который занимает время и место на диске. Большинство приложений считывают и обрабатывают весь файл, а затем переименовывают файл (с расширением резервной копии). Это полезно для отладки. Удаление всего файла часто является более быстрой операцией, чем запись нового файла без обработанных данных.

Удаление должно осуществляться только при необходимости. Для файлов можно сохранить смещение, где начинаются действительные данные, тем самым уменьшая необходимость удаления данных из файла. В целях безопасности перезапись данных в файле часто происходит быстрее, чем создание нового файла без обработанных данных.

Сначала попробуйте написать свою программу, чтобы не удалять данные в файле. Удаляйте только по мере необходимости, после того, как программа станет надежной и правильно работает. Многие люди советуют удалять файлы только тогда, когда на диске больше нет свободного места.

...