0

ローカル ネットワーク上のシステムには、多くのファイル (ワード、エクセル) があります。これらのファイルから毎日バックアップを取得します。ここで知りたいのは、ファイルがバックアップと異なるかどうかです。たとえば、「test.docx」というファイルがあり、そのバックアップ名が「test_backup.docx」であるとします。ユーザーが「test.docx」に変更を加えたかどうかを知りたいですか? この 2 つのファイルを比較したいと思います。

1 つの方法は、これらのファイルを単語ごとに比較することです。違いが検出された場合、ファイルが更新されたと結論付けることができます。

今私の質問は、この違いを検出するためのチェックサムなどの他の方法はありますか? この方法で、更新がどこで行われたかを見つけることができますか?

ありがとう。

4

2 に答える 2

0

シンクトイを見たことがありますか?

バックアップ コピー プロセスを自動化する必要があるように思えますが、実際には特定の違いは気にせず、違いがあるかどうかを判断しようとしているだけです。私の答えは、その推測に基づいています。

ハッシュは、ファイルを本当にバックアップする必要があるかどうかを判断するための優れた方法ですが、ファイル全体を読み取り、コストのかかるタスクを実行する必要があります。

ファイルのサイズとタイムスタンプ (変更、アクセス) を確認することで、バックアップ ファイル リストを前処理できます。それらが一致しない場合は、チェックサムなしでバックアップします。それらが一致する場合、それらが同じであると仮定するか、コンテンツをハッシュするかはあなた次第です。すべてのタイムスタンプとサイズがバックアップコピーと一致し、このヒューリスティックが間違っていることが判明した場合は、最初にそれらが同じであると仮定してみます-ハッシュに頼りますしかし、可能な限り最速のアルゴリズムを見つけてください - ハッシュのアプリケーションは高度なセキュリティを必要とせず、むしろ高性能を必要とするようです.SHAとMD5は両方とも恐ろしいパフォーマンスでやり過ぎです.

于 2013-02-05T17:24:08.123 に答える
0

ファイルの署名を計算する方法は次のとおりです。

public static string Signature(this FileInfo input)
{
    MD5CryptoServiceProvider cryptoTransform = new MD5CryptoServiceProvider();
    FileStream fs = new FileStream(input.FullName, FileMode.Open, FileAccess.Read);
    BinaryReader reader = new BinaryReader(fs);
    byte[] data = reader.ReadBytes((int)fs.Length);
    string hash = BitConverter.ToString(cryptoTransform.ComputeHash(data)).Replace("-", "");
    reader.Close();
    fs.Close();
    return hash;
}

次に、変更を検出するために、以前のバージョンの署名に対してその署名を計算します。

于 2013-10-29T14:23:26.500 に答える