Как оптимально сериализовать diff из двух папок в C ++ - PullRequest
1 голос
/ 11 марта 2020

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

Для этой цели Я нашел библиотеку dtl. Какой алгоритм или функцию библиотеки следует использовать, чтобы записать на диск файл diff, который я затем смогу затем прочитать и применить для исправления файла? Любой пример кода для этого? Я попытался записать результат shortest edit script (SES) на диск, но понял, что мне нужно указать символ и операцию для каждого байта. Это, конечно, делает выходной файл больше, чем весь файл сравнения, что делает этот разностный формат полностью избыточным, поскольку вместо сохранения всего целевого файла будет сохранено больше места для хранения.

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

1 Ответ

1 голос
/ 13 марта 2020

После еще одного поиска я нашел проект HDiffPatch. Очевидно, это работало нормально, но при сравнении папок большего размера требуется много времени:

diff usage: hdiffz [options] oldPath newPath outDiffFile
patch usage: hpatchz [options] oldPath diffFile outNewPath

РЕДАКТИРОВАТЬ:
Еще один хороший вариант - open-vcdiff, но он поддерживает только отдельные файлы.

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