0

たくさんのファイルを比較するプログラムを書いています。

まず、ファイルをファイルサイズでグループ化します。次に、グループ化されたファイル間でバイトごとにチェックします。使用を最小限に抑えるために、バイトごとの比較の前にどのパラメーターまたはプロパティを確認できますか?

Upd:チェックサムを取得するには、ファイル全体を読み取る必要があります。等しくないファイルをフィルタリングできるプロパティを探しています。100%等しいファイルが必要だと言うのを忘れました。ハッシュ関数には衝突があります。

4

2 に答える 2

2

ファイルがオペレーティング システムによって同じサイズであると記録されている場合、バイト数を確認する以外にファイルが異なるかどうかを知る方法はありません。

ファイルのグループの場合、2 つのファイルが同じであることがわかったら、比較は 2 つのうちの 1 つに対してのみ行う必要があります。このような理由から、日付が似ているファイルは同一である可能性が高いという理論に基づいて、グループ内のファイルを日付でソートすることが賢明です。したがって、同一ファイルのリストを維持する必要があります。新しい比較が行われると、リストの先頭と比較するだけで済みます。

前もってできるだけ多くのメモリを割り当て、リスト ヘッドをメモリに保持する必要があります。

比較が行われているとき、実際にはバイトを比較するのではなく、単語を比較する必要があります。たとえば、32 ビット マシンでは、ハード ドライブから 512 バイト ブロックのデータを読み取り、各ブロックを一度に 4 バイトずつ比較します。新しい x86 プロセッサには、MMX と呼ばれるベクトル化された op 命令があります。それらを使用していることを確認する必要があります。

Intel ボックス用に C で記述している場合は、Microsoft ではなく Intel のコンパイラを使用してください。アセンブリを再確認して、コンパイラが愚かなことをしていないことを確認します。

並列化することで作業を高速化することもできます。これは、スレッドを作成することによって行われます。たとえば、コードがクアッド コア マシンで実行されている場合、4 つのスレッドを作成し、4 つのスレッド間で作業を分割します。

于 2013-02-22T15:37:17.877 に答える
0

ファイルのチェックサムをチェックします。このタスクの修理でした

Python の場合、hashlibを使用できます。C の場合は、たとえばopenssl の md5 を使用できます。phpMySQL、そしておそらく他のすべてのプログラミング言語にも同様の関数があります

最終的には、Linux 組み込みのmd5sumを使用できます

于 2013-02-22T12:02:43.677 に答える