如何在 C++ 中最佳地序列化两个文件夹的差异

How to serialize a diff of two folders optimally in C++

我正在尝试为文件夹中的多个文件递归开发文件 diff 格式。考虑一个包含补丁文件的源目录和一个包含原始文件的目标目录。编写一个最小 diff 文件,它表示源目录和目标目录中所有文件之间的差异,可以应用于原始文件,以便将原始文件转换为修补文件。

为此,我找到了 dtl 库。我应该使用库的哪种算法或功能将文件 diff 写入磁盘,然后我可以回读并应用以修补文件?任何示例代码吗?我尝试将 shortest edit script (SES) 的结果写入磁盘,但我意识到我需要为每个字节指定字符和操作。这当然会使输出文件大于整个比较文件,使这种差异格式完全多余,因为存储整个目标文件会节省更多存储空间。

作为另一个参考,这与 git or svn 等版本控制系统的操作方式非常相似,但我不想使用它们,因为我主要处理二进制文件以及创建和创建的简单要求应用补丁。

经过更多搜索,我找到了 HDiffPatch 项目。 它显然工作得很好,但似乎需要很长时间才能进行更大的文件夹比较:

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

编辑:
另一个不错的选择是 open-vcdiff,但它只支持单个文件。

使用 HDiffPatch:您可以 运行 hdiffz 使用“-s-48”来提高速度; 或尝试“-s-32”、“-s-1k”、“-s-128k”...