1

(OK、怒鳴らないでください、ここでは非常に遅いです:))

私は差分差分ツールを研究しています (コマンドライン ツールまたはコンポーネント、 Delphi 2010から呼び出すことができる限り問題ではありません) 。

ファイルをサーバーにアップロードするこのプロジェクトがあります。アップロードを最適化する必要があるため、新しいファイルを送信してサーバー上の古いファイルと新しいファイルの両方のバージョンを比較する代わりに、差分ファイルのみをアップロードできれば非常に便利です。

ここで重複について読みました

Duplicity は、Amazon S3 のような単純なストレージ サービスと同様に、ストレージ サーバーからの協力なしでバックアップを可能にする rdiff-backup のバリエーションです。各ブロックのハッシュを事前に生成し、暗号化してサーバーに保存し、増分バックアップを実行するときにそれらを取得することで機能します。残りのデータも、セキュリティ目的で暗号化されて保存されます。

元のファイルにアクセスせずに、新しいファイルに基づいてパッチまたはデルタ ファイル (適切な用語が何であるかはわかりません) を生成するツール (または方法) はありますか?

つまり、一度変更したこのファイルがあるとしましょう。

my-data.db
[ my-data.db ] modified       --> [ delta-file-1.diff ]

古いファイルにアクセスせずに、新しいファイルに基づいて [ delta-file-1.diff ] を構築する方法はありますか? (元のファイルに何らかの署名を保存することによるものでしょうか?)

このトピック (rdiff、PatchAPI、ZDelta、XDelta、MSDelta など) について多くのことを調査しましたが、これに関する実際の作業例は見つかりません。

これらの参考文献はこれについて語っていますが、誰かが私を案内したり、上記の質問に答えるより良いツールを提案したりできるかどうかを知りたいと思いました.

ソース ファイルを使用しないターゲットの圧縮

Windows パッチ API: ベース (ソース) ファイルなしでターゲットを圧縮する

前もって感謝します!

4

3 に答える 3

1

興味のある方へ: Windows ポートがあり、Delphi から起動できるrdiffと、私の理解が正しければ、rdiff の背後にあるエンジンである librsync があります

どちらも古いファイル (ファイル自体よりもはるかに小さい) と完全な新しいファイルの署名が必要です。

リバース デルタを実行して、古いファイルから新しいファイルを取得できます。

于 2012-03-19T01:15:29.173 に答える
1

ファイルに追加するか、既知のサイズのブロックで編集するだけの場合 (テキスト ファイルでは不可能な可能性が最も高い)、ハッシュが実行可能であると思います。eMule の AICH ( eMule wiki / aMule wiki ) を参照してください。

基本的に、ファイルをサイズ N のブロックに分割し、各ブロックのハッシュ コードを計算します。次に、M ブロックから「スーパー ハッシュ」を計算します。このアプローチを使用すると、多くのメタデータを転送することなく、変更されたブロックを追跡できます。

それ以外の場合: 差分が取得されたベースを知らずに、差分からファイル全体を作成することはできません。ベースを知らずに差分を作成することもできません。

于 2012-02-25T07:12:47.340 に答える
1

いいえ、A と B を取得する方法がなければ、A と B の違いを取得することはできません。

古いバージョンの A から A を再構築し、違いを適用することができます。

Aの署名はそれをカットしません。

于 2012-02-25T07:13:01.460 に答える