Вам также следует рассмотреть возможность использования инкрементного резервного копирования.
Я опубликовал некоторые оптимизированные функции управления версиями файлов для нашего SynProject инструмента с открытым исходным кодом. Класс TVersions
в модуле ProjectVersioning позволяет хранить двоичные файлы diff внутри zip-контейнера.
Наш фирменный, но более быстрый, чем zip алгоритм SynLZ используется для хранения инкрементных различий. Это очень хорошо работает на практике.
Смотри, например, TVersions.FillStrings
метод получения списка файлов для обновления.
Имейте в виду, что вы можете обнаружить разницу в один час, в зависимости от текущего летнего времени. Вот как мы разрешаем сравнение по дате:
function SameFileDateWindows(FileDate1,FileDate2: integer): boolean;
// we allow an exact one Hour round (NTFS bug on summer time zone change)
begin
dec(FileDate1,FileDate2);
result := (FileDate1=0) or (FileDate1=1 shl 11) or (FileDate1=-(1 shl 11));
end;
Мы не читаем содержимое файла здесь. Для целей резервного копирования достаточно полагаться на дату файла, чтобы пометить файл для сравнения. Затем выполняется дифференциальный дифференциал для обеих версий файла. Если содержимое файла одинаковое, в нем будет храниться только разница дат.
ИМХО, вам не следует использовать проприетарный контейнер madzip, а стандартный, такой как .zip. Их несколько, включая нашу версию, используемую в SynProject или в нашем ORM. Это быстрее, чем MadZip, и распаковка оптимизирована. См. SynZip модуль для низкоуровневого сжатия и простого читателя и записи .zip, а также более развитые классы в SynZipFiles (используется в SynProject). Для чистой версии Delphi, например madzip, проверьте модуль PasZip , который работает быстрее, чем madzip (но PasZip не будет компилироваться с Unicode Delphi, а SynZip -).