2012-05-04 16 views
7

ファイル間にデルタを生成するために.NET環境で圧縮を実行できた人は誰もいません。可能であれば、おそらくmsdelta.dllの機能を使用して、この機能を使用したいと思います。また、他のライブラリ(オープンソースが望ましい)を使ってデルタを生成する方法にも興味があります。.NETのデルタ圧縮

+0

[xdelta(http://xdelta.org/)は、私が最もよく見たオープンソースです。しかし、C#から呼び出すのがどれほど簡単かわかりません。 – Rup

+0

ありがとうございます。私はあなたのリンクをチェックアウトし、C#デコーダバージョンを持っている別のリンク(http://www.pobox.com/~skeet/csharp/miscutil)を見つけました。しかし、私はエンコーダも必要になります。 – dubs

答えて

6

私は、これは恥知らずプラグのあまりないことを願うが、私は自分自身の目的のためPatchAPIMSDelta両方のラッパーライブラリを書いています。

このライブラリは、MS-PLおよびDBAD-PLでの二重ライセンスで、GitHubで利用できます。

私はNuGetでプロジェクトを公開するという概念を楽しんでいますが、現時点ではソースをダウンロードしてデルタを作成し適用することができます。デルタの作成

は自明であるべきである。

var compression = new MsDeltaCompression(); /* or PatchApiCompression(); */ 
compression.CreateDelta(sourcePath, destinationPath, deltaPath); 

と等しく自明(たぶん)デルタ適用される:x86でテストさ

var compression = new MsDeltaCompression(); /* or PatchApiCompression(); */ 
compression.ApplyDelta(deltaPath, sourcePath, destinationPath); 

が、P /呼び出しシグネチャをx64とia64でも同様に有効です。あなたはMSDeltaPatchAPIを使用しているかどうかに決めていないしている場合

は、私のプロジェクトのREADME.mdは(簡単に)あなたが使用すべきものを提案しようとしますが、そうでないthe documentation for Microsoft's Delta Compressionこれは約を言っていますMSDeltaPatchAPI

MSDelta ...他の方法によって製造されたものよりもはるかに小さい圧縮ファイルを作成することができます。 Windows Vistaでの出荷は、これまでPatchAPIとしてリリースされていた次世代テクノロジです(今後もサポートされる予定です)。

強調鉱山。

+0

[The NuGet Package](http:// nuget。org/packages/DeltaCompressionDotNet /)。 –

+1

偉大なライブラリta.speot.is。ネットワーク上で作業している場合、デルタを取得するためにファイル全体をネットワーク経由で転送する必要はなく、代わりにファイルを転送するだけで、シグネチャファイルを作成する可能性がある場合は、私は不思議でした。デルタ。 – ymerej

+0

@Jeremyありがとう。何種類かのデルタパッチサーバーについて質問していますが、現在のバージョンのファイルのハッシュを送信し、パッチを送って最新のものに更新します。 –

1

化石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); 

デルタは、あなたがこのような元のファイルに変更を適用することができます持つ:

byte[] applied = Fossil.Delta.Apply(origin, delta); 

私はそれは価値がこのアルゴリズムの作者は、SQLiteのの同じ著者であることを言及すると思う - それは、信憑性がある。