(好吧,不要对我大喊大叫,现在已经很晚了:))
我正在研究delta diff工具(命令行工具或组件,只要我可以从 Delphi 2010 中调用它们就没关系)
我有这个项目,我将文件上传到服务器,我需要优化上传,所以如果我只能上传增量文件而不是发送新文件然后比较旧文件,那么它真的很棒。服务器上的新文件版本。
我读到了Duplicity here
Duplicity是rdiff-backup的变体,允许在没有合作的情况下进行备份 存储服务器,与Amazon S3等简单存储服务一样。它的工作原理 预先为每个块生成哈希值,加密它们,并将它们存储在 服务器,然后在执行增量备份时检索它们。其余的数据是 也出于安全目的加密存储。
这让我想到,是否有一种工具(或方法)基于新文件生成补丁或增量文件(我不确定适当的术语是什么),< strong>没有可以访问原始文件吗?
我的意思是说我有一个我修改过的文件:
my-data.db
[ my-data.db ] modified --> [ delta-file-1.diff ]
有没有办法根据新文件构建[delta-file-1.diff]而不可以访问旧文件? (可能是通过为原始文件存储某种签名?)
我研究了很多这个主题(rdiff,PatchAPI,ZDelta,XDelta,MSDelta等等),但我找不到任何真实的工作实例。
这些参考文献谈到了这一点,但我想听听是否有人可以指导我和/或提出更好的工具来回答我上面提到的问题。
Compressing a Target Without a Source File
Windows Patch API: Compressing a Target Without a Basis (Source) File
提前致谢!
答案 0 :(得分:1)
当你只附加到文件或编辑已知大小的块(很可能不是文本文件)时,我猜哈希是可行的。请参阅eMule的AICH(eMule wiki / aMule wiki)。
基本上,您将文件拆分为大小为N的块,并计算每个块的哈希码。然后你计算M块中的“超级哈希”。使用这种方法,您可以跟踪已更改的块,而无需传输大量元数据。
否则:你不能在不知道差异所依据的基础上从差异中创建整个文件。你也不能在不知道基础的情况下创造差异。
答案 1 :(得分:1)
如果没有获得A和B的方法,你就无法从A和B中获得差异。
您可以从旧版本的A重建A并应用差异。
A的签名不会削减它。
答案 2 :(得分:1)