今朝、私は大量のファイルを失いましたが、それらの 1 つのボリュームは内部的にも外部的にも最適化されていたため、100% の回復に必要なすべての情報が利用可能です。必要な場所に FAT を入力するだけです。
これを実行するプログラムを作成し、ファイルにダンプした FAT のコピーでテストしたところ、一部のファイル (526 個中 17 個) で FAT チェーンが 1 つの単一クラスターで長すぎることを除けば、完全に動作しました。となり、次のファイルと相互リンクされます。
幸いなことに、私は問題が何であるかを正確に知っています。EOF 計算で使用ceil
したのは、1 バイトを超えるだけでも余分なクラスター全体が必要になるためです。
//Cluster is the starting cluster of the file
//Size is the size (in bytes) of the file
//BPC is the number of bytes per cluster
//NumClust is the number of clusters in the file
//EOF is the last cluster of the file’s FAT chain
DWORD NumClust = ceil( (float)(Size / BPC) )
DWORD EOF = Cluster + NumClust;
このアルゴリズムは、サイズがたまたまクラスター サイズの倍数であるファイルを除いて、すべてのファイルに対して正常に機能します。
しばらく考えましたが、これを行う方法について途方に暮れています。簡単そうに見えて意外と難しい。
任意のサイズのファイルに対してどの式が機能しますか?