ファイルはルートを頂点とする逆ツリー構造で管理される。
FD のセクター 19 〜 32 はルート ディレクトリと呼ばれ、
ルートに存在するファイルの Directory Entry を格納する専用領域となっている。
ルート ディレクトリのサイズは 14セクター × 512バイト = 7,168バイト。
一方 Directory Entry のサイズは 32 バイトなので、ルート ディレクトリには 224 個の Directory Entry が記録される。
ルート ディレクトリを構成する Directory Entry (32 バイト) の詳細は次の通り。
Offset | バイト数 | 内容 |
0x0000 - 0x0007 | 8 | ファイル名 ( 1バイト目が 0x00 は未使用エントリー、 0xE5 は削除ファイル ) |
0x0008 - 0x000A | 3 | 拡張子 |
0x000B | 1 | 属性 |
0x000C - 0x0015 | 10 | 予備 |
0x0016 - 0x0017 | 2 | 更新時刻 |
0x0018 - 0x0019 | 2 | 更新日付 |
0x001A - 0x001B | 2 | 先頭クラスター番号 |
0x001C - 0x001F | 4 | ファイル サイズ |
- ファイル名や拡張子の文字数が短い場合、残りの部分は 0x20 (スペース) で埋められる。
- 属性はビット位置ごとに次の意味がある。
ビット位置 | 7 - 6 | 5 | 4 | 3 | 2 | 1 | 0 |
意味 | 予約 | Archive | Directory | Volume | System | Hidden | Read Only |
- 更新時刻データのビット構成。
ビット位置 | 15 - 11 | 10 - 5 | 4 - 0 |
適用 | 時刻 | 分 | 秒 |
- 更新日付データのビット構成。
ビット位置 | 15 - 9 | 8 - 5 | 4 - 0 |
適用 | 年 | 月 | 日 |
- 先頭クラスター番号。
ファイルを保存したクラスターの先頭番号。
ファイル サイズが 0 ならクラスター番号も 0 になる。
サブ ディレクトリもファイルの一種で、ルート ディレクトリや他のサブ ディレクトリに、ファイル属性 "Directory" として登録される。
その構成は Directory Entry の集合で、実態は一部 (先頭2個分の Directory Entry) を除いてルート ディレクトリと同様である。
( Directory Entry については、「
V.2.Directory Entry の詳細」参照 )
先頭2個の Directory Entry は、自己アドレスと親アドレスを記録している。
以下にその構造を示す。
【 サブ ディレクトリの先頭 Directory Entry 】
Offset | バイト数 | 内容 |
0x0000 - 0x0007 | 8 | ファイル名 先頭に 0x2E (ピリオド) 1文字で、残りは 0x20 (空白) で埋められる |
0x0008 - 0x000A | 3 | 拡張子 すべて 0x20(空白) |
0x000B | 1 | 属性 0x10 (ディレクトリ) |
0x000C - 0x0015 | 10 | 常に 0x00 |
0x0016 - 0x0017 | 2 | 更新時刻 |
0x0018 - 0x0019 | 2 | 更新日付 |
0x001A - 0x001B | 2 | 自己クラスター番号 |
0x001C - 0x001F | 4 | 常に 0x00 |
【 サブ ディレクトリの 2番目の Directory Entry 】
Offset | バイト数 | 内容 |
0x0000 - 0x0007 | 8 | ファイル名 先頭 2文字が 0x2E (ピリオド) で、残りは 0x20 (空白) で埋められる |
0x0008 - 0x000A | 3 | 拡張子 すべて 0x20(空白) |
0x000B | 1 | 属性 0x10 (ディレクトリ) |
0x000C - 0x0015 | 10 | 常に 0x00 |
0x0016 - 0x0017 | 2 | 更新時刻 |
0x0018 - 0x0019 | 2 | 更新日付 |
0x001A - 0x001B | 2 | 親クラスター番号 親クラスターがルート ディレクトリの場合は 0x00 |
0x001C - 0x001F | 4 | 常に 0x00 |
複数の連続した Directory Entry を用いることで、8文字 (ASCII文字換算) 以上のファイル名に対応している。
LFN に対して従来 (8文字以下) の方式を SFN (Short File Name) という。
ASCII文字換算で 8文字以上のファイル名入力があった場合、複数の LFN 用 Directory Entry に入力ファイル名を格納し、
1つの SFN 用 Directory Entry に省略したファイル名と属性を格納することで対処する。
【 LFN 用 Directory Entry 】
Offset | バイト数 | 内容 |
0x0000 | 1 | Flag |
0x0001 - 0x000A | 10 | File Name part 1 |
0x000B | 1 | 属性 常に 0x0f |
0x000C | 1 | 予約 0x00 |
0x00D | 1 | CRC ( SFN を基に作ったチェックサム ) |
0x000E - 0x0019 | 12 | File Name part 2 |
0x001A - 0x001B | 2 | 常に 0x00 |
0x001C - 0x001F | 4 | File Name part 3 |
- Flag : LFN Entry の順番を示す。
ファイル名先頭の LFN を 1 として順に番号を振り、最終 LFN Entry には 0x40 との OR を記録する。
- LFN Entry の並び (登録順) は、ファイル名末尾の LFN Entry から順に並べ、最後に SFN 用の Entry を配置する。
3個の LFN Entry を使った場合の Directory Entry の並び方は以下のようになる。
登録順 | Entry の種類 | Flag |
1 | 最終 LFN | 0x43 |
2 | No.2 LFN | 0x02 |
3 | No.1 LFN | 0x01 |
4 | SFN | ― |
- LFN Entry はファイル名のみを記録し、属性等は記録しない。
- 拡張子、先頭クラスター番号、属性等は SFN 用の Directory Entry に記録する。
また、SFN 用には 8バイトに省略したファイル名も記録する。
- ファイル名は File Name part 1 〜 3 に分散記録される。
- 1つの LFN Entry には、2バイト文字で最大 13文字を格納する。
- ASCII (1バイト) 文字の場合は、上位バイトを 0x00 で埋める。
- 2バイトの "0" (0x0000) がファイル名の終端を表し、余った部分は 0xffff で埋める。
▼ 512 バイト (1クラスター) を超えるファイルを格納したクラスター番号は、FAT によって管理される。