Самый быстрый способ стереть часть файла в C ++ - PullRequest
3 голосов
/ 22 августа 2011

Интересно, какой самый быстрый способ стереть часть файла в c ++.

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

А как насчет системы баз данных, как они так быстро удаляют записи?

Ответы [ 3 ]

4 голосов
/ 22 августа 2011

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

1 голос
/ 23 августа 2011

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

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

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

0 голосов
/ 22 августа 2011

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

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