ファイルを抽出して xbox 360 の STFS ファイルに追加するプログラムを作成しています。STFS 構造はミニ ファイル システムであり、ハッシュテーブル、ファイル テーブルなどがあります。
ファイルの抽出は簡単です。ファイルの開始ブロックとファイル内のブロックの量があるので、ブロック オフセットを見つけ、ブロックの長さを読み取り、それをファイルとして送信するだけです。しかし、ファイルを置換または削除する必要がある場合はどうなりますか? 一般的に、Windows とコンピューターでは、ファイルは実際には削除されず、ファイル テーブルから削除され、他の何かがスペースを必要とするときに上書きされると読みました。では、ファイルを書き込んでいるときに、それを保持するのに十分な大きさの未使用のブロックのシーケンスを見つけるにはどうすればよいでしょうか? ブロックの長さは 0x1000 バイトで、残りのスペースを空のバイトで埋めるため、すべてがうまく調整されますが、追加したいファイルに適合する未使用のブロック範囲を見つける効率的な方法が思いつきません。
私の現在の計画は、ファイルの削除または追加に関するすべてを書き直して、上書きする方法がわからない大量の未使用スペースがないようにすることです。NTFS や FAT32 などのファイル システムについて、理解するのに何日もかからず、基本的なファイル マネージャを作成するために必要な情報が含まれている、私が読める優れた入門書はありますか?
構造への参照: http://free60.org/STFS
編集:2番目に、テーブル内の各ファイルの範囲のリストを作成します。つまり、サイズに基づく開始オフセットと終了オフセットです。ファイルを挿入するために開いている範囲を探すときは、0 から開始し、各範囲の終了開始または終了が、挿入するファイルに必要な範囲内にあるかどうかを確認します。開始または終了のいずれかが範囲内にある場合は、他のファイルの終了オフセットの最後に移動します。これは私の最初のアイデアよりも優れていますが、それでも効率が悪いようです。ファイル テーブル内のすべてのファイルに対して複数の比較を行う必要があります。