Файлы и каталоги
Вы, конечно, знаете, что файловая система DOS имеет древовидную структуру. В корневом каталоге располагаются 32-байтовые элементы, которые содержат информацию о файлах и других каталогах. Для чтения корневого каталога необходимо определить его расположение и размер.
Корневой каталог находится сразу за последней копией FAT. Количество секторов, занимаемых одной копией FAT, находится в блоке параметров BIOS в BOOT-секторе в поле fatsize, количество копий FAT - в поле fatcnt блока BPB. Следовательно, перед корневым каталогом находится один BOOT-сектор и (fatcnt_*_fatsize)
секторов таблицы размещения файлов FAT.
Размер корневого каталога можно определить исходя из значения поля rootsize. В этом поле при форматировании диска записывается максимальное количество файлов и каталогов, которые могут находиться в корневом каталоге. Для каждого элемента в каталоге отводится 32 байта, поэтому корневой каталог имеет длину (32_*_rootsize) байтов.
Корневой каталог занимает непрерывную область фиксированного размера. Размер корневого каталога задается при форматировании и определяет максимальное количество файлов и каталогов, которые могут быть описаны в корневом каталоге. Для определения количества секторов, занимаемых корневым каталогом, можно воспользоваться следующей формулой:
RootSecs = sectsize_/_(32_*_rootsize)
В этой формуле sectsize - размер сектора в байтах, он может быть получен из соответствующего поля BOOT-сектора.
После корневого каталога на логическом диске находится область файлов и подкаталогов корневого каталога. На рисунке изображены все области логического диска. Такую структуру имеют логические диски, расположенные в разделах жестких дисков, а также дискеты.
Области логического диска Номер начального сектора на логическом диске
++ ¦ ¦ 0 ¦ BOOT-сектор и ¦ ¦ зарезервированные ¦ ¦ сектора ¦ ¦ ¦ +¦ ¦ ¦ ressecs - количество резервных ¦ Первая копия FAT ¦ секторов ¦ ¦ +¦ ¦ ¦ ressecs+fatsize ¦ Вторая копия FAT ¦ ¦ ¦ +¦ ¦ ¦ ressecs+(fatsize*fatcnt) ¦ Корневой каталог ¦ ¦ ¦ +¦ ¦ ¦ ressecs+(fatsize*fatcnt)+ ¦ Область данных ¦ sectsize_/_(32*rootsize) ¦ ¦ ++
