Эффективный оперативный поиск и замена больших файлов.

StackOverflow https://stackoverflow.com/questions/724998

Вопрос

Для этого есть несколько стандартных инструментов, но мне нужен простой графический интерфейс, чтобы помочь некоторым пользователям (в Windows).Они получат диалоговое окно открытия файла и выберут файл для обработки.

Файл будет XML-файлом.Файл будет содержать (в первых нескольких строках) текстовую строку, которую необходимо удалить или заменить пробелами (неважно, какие именно).

Проблема в том, что размер XML-файла составляет несколько гигабайт, но фиксированная строка поиска и замены будет происходить в пределах первых 4 КБ или около того.

Каков наилучший способ перезаписать строку поиска и сохранить ее на месте, не требуя чтения всего объема в память или чрезмерной записи на диск?

Это было полезно?

Решение

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

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

Этот фрагмент показывает, как использовать эквивалент Win32, СоздатьСопоставлениеФайлов() функция.

Другие советы

Вы можете легко написать свой собственный инструмент.Если это в самом начале, то подойдет любой брутфорс.Просто продолжайте сканирование, пока не найдете его.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top