是否有人能够在.NET环境中执行压缩以生成文件之间的增量。我想尽可能使用这个功能,也许是通过使用msdelta.dll中的功能。我也对如何使用其他库(最好是开源)生成增量感兴趣。
答案 0 :(得分:8)
我希望这不是一个无耻的插件,但为了我自己的目的,我已经围绕 PatchAPI 和 MSDelta 编写了一个包装库。
该库在MS-PL和DBAD-PL下是双重许可的,可在GitHub上获得。
我很喜欢在NuGet上发布项目的概念,但目前你可以下载源代码并创建和应用增量。
创建delta应该是不言自明的:
var compression = new MsDeltaCompression(); /* or PatchApiCompression(); */
compression.CreateDelta(sourcePath, destinationPath, deltaPath);
同样不言自明(希望如此)正在应用delta:
var compression = new MsDeltaCompression(); /* or PatchApiCompression(); */
compression.ApplyDelta(deltaPath, sourcePath, destinationPath);
在x86上测试过,但P / Invoke签名对x64和ia64同样有效。
如果您还没有决定是否使用 PatchAPI 或 MSDelta ,我的项目README.md
会尝试(简要地)建议哪一个您应该使用,但除此之外the documentation for Microsoft's Delta Compression有关于 MSDelta 与 PatchAPI 的说法:
MSDelta ...可以创建比其他方法生成的压缩文件小得多的压缩文件。使用Windows Vista发布,它是以前作为PatchAPI发布的下一代技术(将继续得到支持)。
强调我的。
答案 1 :(得分:3)
Fossil SCM有一个用C实现的增量压缩算法,我在C#上创建了一个端口:https://github.com/endel/FossilDelta
要创建增量,您必须提供原点和目标的byte[]
。它以byte[]
的形式返回,您可以稍后申请。
byte[] origin = System.IO.File.ReadAllBytes ("old-file");
byte[] target = System.IO.File.ReadAllBytes ("new-file");
byte[] delta = Fossil.Delta.Create(origin, target);
拥有delta,您可以在原始文件中应用更改,如下所示:
byte[] applied = Fossil.Delta.Apply(origin, delta);
我认为值得一提的是,这个算法的作者是SQLite的同一作者 - 所以它有一定的可信度。