破損したファイルを検出するにはどうすればよいですか?

破損したファイルを検出するにはどうすればよいですか?

MP4、Mp3、Exe などの多くのファイルがありますが、何らかの理由でバックアップ中にハード ドライブに正しくコピーされませんでした。16 進エディターでファイルの内容をチェックしたところ、破損したファイルの多くで、データがあるはずの領域が 00 で埋められており、機能するデータがあるはずの領域がランダム データになっているものもありました。少なくとも 00 で埋められたファイルについては、これらすべてを検索して見つける方法があるはずです。Windows の検索ツール (Windows 8.1) を試し、ファイルの内容の検索を有効にしましたが、Windows の検索で 16 進数を検索する方法がないため、00 16 進数を表す ASCII ..... ピリオドを検索しました。16 進エディターから正しい .... をコピーして検索に貼り付けましたが、うまくいきませんでした。

大量の 00 16 進数フィルを含むすべてのファイルを検索したいのですが、方法がわかりません。ヒントがあれば教えていただけるとありがたいです。ありがとうございます。

答え1

バイナリビューアプログラムには、指定されたディレクトリ内 (またはマシン全体のルートを指定可能) で 16 進シーケンスとバイナリ パターンを検索できる機能があります。

もう 1 つの解決策は、プログラムですべてのファイルをスキャンし、予想よりも多くの「00」値 (つまり、「00」の平均数が多い) を持つファイルを選択することです。このためにはプログラミング言語を使用する必要があります。私は統計学者なので、次のようなR理由でプログラミング言語を好みます。

  1. 無料です。
  2. 習得するのは比較的簡単です。

では、次のコードRを使用して、ファイルの「16 進数」値を調べることができます (ここでは 1 バイトの 16 進数を調べていると想定しています) 。R

install.packages("DescTools")
library(DescTools)
myBinary="D:/temp/2.jpg"

myhex = readRaw(myBinary)
#View first 20 entries
head(myhex$fileRaw, n=20)
 ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01 00 01 00 00

これで、「00」エントリの平均数がわかります。

#Find the mean number of times a "00" entry appears in this file
mean(myhex$fileRaw=="00")
 0.008298835

必要なのは、このコードの周りに単純なループ構造を配置して、ディレクトリ内のすべてのファイルをループし、「00」エントリの平均数を出力させることだけです。さらに洗練された方法で、このアルゴリズムを一連のファイルに適用して、最適なナイーブ平均カットオフポイントを「トレーニング」することもできます。知られている良い(つまり、破損していない)ファイルを検索し、そこにあるファイル内の「00」エントリの平均(つまり、平均の平均)を計算します。おそらく、これに基づいて典型的な信頼区間を計算し、信頼区間の上限をカットオフポイントとして使用して、プログラムに入力して、破損していないファイルを検索することができます。未知腐敗。これは腐敗した者を排除するのに役立ちます。

関連情報