dub*_*ubs 7 .net compression delta
有没有人能够在.NET环境中执行压缩以生成文件之间的增量.我想尽可能使用这个功能,也许是通过使用msdelta.dll中的功能.我也对如何使用其他库(最好是开源)生成增量感兴趣.
我希望这不是一个无耻的插件,但我为了自己的目的围绕PatchAPI和MSDelta编写了一个包装器库.
该库在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同样有效.
如果您还没有决定是否使用PatchAPI或MSDelta,我的项目会README.md尝试(简要地)建议您应该使用哪一个,但是否则Microsoft的Delta Compression文档会对MSDelta与PatchAPI有关:
MSDelta ...可以创建比其他方法生成的压缩文件小得多的压缩文件.随着Windows Vista的发布,它是以前作为PatchAPI发布的下一代技术(将继续得到支持).
强调我的.
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 的同一作者——所以它有一定的可信度。
| 归档时间: |
|
| 查看次数: |
3031 次 |
| 最近记录: |