2015-11-15 13 views
6

私はディスクファイルを直接操作しています。ディレクトリ構造の中でディレクトリのサイズが0なので、ディスク上のディレクトリファイルの終わりをどうやって検出するのだろうか。FAT32のデータ領域のディレクトリの終わりを検出する方法は?

DIR_Name[0] == 0x00 

上記の方法でディレクトリの終わりを検出する方法は信頼できないようです。 wiki上で、FAT32のルートディレクトリのサイズが512エントリに固定されていることがわかりましたが、他のサブディレクトリについてはどうでしょうか。 FATとクラスタ番号を使ってディレクトリを移動する必要があるかもしれません。

+0

OSをタグに追加してください。ディレクトリはC標準の一部ではありません。 –

+2

@JensGustedt - fat32は十分正確でなければなりません。 OSに依存しません。 –

答えて

4

the first Google search resultから「ディスクフォーマットのFAT32」について、24ページ:

ディレクトリが作成され

、 そのDIR_Attrフィールドに設定ATTR_DIRECTORYビットを持つファイル、あなたは0 DIR_FileSizeにそのDIR_FileSizeを設定 が使用されておらず、ATTR_DIRECTORY属性が のファイルでは常に0になります(ディレクトリは、クラスタチェーンの後に単に EOCマークが付いたサイズになります)。

また、FAT32ルートディレクトリのサイズは512エントリに固定されていません。そのサイズは他のディレクトリとまったく同じ方法で決定されます。 another reliable sourceから

読書ディレクトリ

読み取りディレクトリの最初のステップは、検索やルート ディレクトリを読んでいます。ルートディレクトリは、直ちにファイルアロケーションテーブル後 固定位置にあるFAT 12またはFAT 16ボリューム上:FAT32で

first_root_dir_sector = first_data_sector - root_dir_sectors;

、ルートディレクトリは、所与のクラスタ上のデータ領域に表示されるとすることができます クラスタチェーン。

root_cluster_32 = extBS_32->root_cluster;

重点を追加しました。

+1

私はこれらのすべてを知っていますが、ディレクトリの終わりに達すると自動的に読み込みを停止する手がかりがまだありません。たとえば、特定のディレクトリの下にあるファイルに対してファイルを検索する場合 –

+0

'DIR_Name [0] == 0x00'ディレクトリエントリのサイズは32バイトです。最初の11バイトは 'char'配列です。最後のディレクトリエントリは、最後の未使用エントリとしてマークする最初の位置にゼロがあります。これはディレクトリサイズの代表ではありません。 –

3

ルート以外のディレクトリは単なるファイルです。

ルートディレクトリは、ディスク上の固定された場所(FATに続く)から開始します。ルートディレクトリのエントリにはクラスタ番号が含まれています。そのクラスタには、ファイルまたはディレクトリのデータが含まれています。そのクラスタ番号のFATへの入力、すなわちFAT[cluster_number]には、ファイルまたはディレクトリに属する​​次のクラスタの番号が含まれます。そのクラスタにはファイルまたはディレクトリのデータが多く含まれています。また、FATエントリには、クラスタ終了マーク(0xFFFFFFF8以上の値)が発生するまで、ファイルまたはディレクトリなどの次のクラスタの番号が含まれます。

+1

これは、クラスタサイズをエントリサイズで割った値を使用できることを意味しますか?そのエントリが読み込まれている場合は、次のブロックのFATに移動しますか? –

+1

それは正しいです。 –

+0

FAT32では、もちろんルートディレクトリはFAT12/FAT16のように固定された場所にはありません。 –

関連する問題