.NET中的Delta压缩

dub*_*ubs 7 .net compression delta

有没有人能够在.NET环境中执行压缩以生成文件之间的增量.我想尽可能使用这个功能,也许是通过使用msdelta.dll中的功能.我也对如何使用其他库(最好是开源)生成增量感兴趣.

ta.*_*.is 8

我希望这不是一个无耻的插件,但我为了自己的目的围绕PatchAPIMSDelta编写了一个包装器库.

该库在MS-PL和DBAD-PL下是双重许可的,可在GitHub上获得.

我很喜欢在NuGet上发布项目的概念,但目前你可以下载源代码并创建和应用增量.

创建delta应该是不言自明的:

var compression = new MsDeltaCompression(); /* or PatchApiCompression(); */
compression.CreateDelta(sourcePath, destinationPath, deltaPath);
Run Code Online (Sandbox Code Playgroud)

并且同样不言自明(希望)正在应用delta:

var compression = new MsDeltaCompression(); /* or PatchApiCompression(); */
compression.ApplyDelta(deltaPath, sourcePath, destinationPath);
Run Code Online (Sandbox Code Playgroud)

在x86上测试过,但P/Invoke签名对x64和ia64同样有效.

如果您还没有决定是否使用PatchAPIMSDelta,我的项目会README.md尝试(简要地)建议您应该使用哪一个,但是否则Microsoft的Delta Compression文档会对MSDeltaPatchAPI有关:

MSDelta ...可以创建比其他方法生成的压缩文件小得多的压缩文件.随着Windows Vista的发布,它是以前作为PatchAPI发布的下一代技术(将继续得到支持).

强调我的.


End*_*del 5

Fossil SCM 有一个用 C 实现的 delta 压缩算法,我在 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);
Run Code Online (Sandbox Code Playgroud)

有了增量,您可以像这样在原始文件中应用更改:

byte[] applied = Fossil.Delta.Apply(origin, delta);
Run Code Online (Sandbox Code Playgroud)

我认为值得一提的是,这个算法的作者是 SQLite 的同一作者——所以它有一定的可信度。