Каждый элемент каталога MS DOS имеет длину 32 байта и структуру представленную в таблице
Табл. Элемент главного каталога.
Длина, (байт) | FAT |
Имя файла, каталога или тома | |
Расширение имени файла | |
Байт атрибутов | |
Резервное поле | |
Код времени обновления файла | |
Код даты изменения файла | |
Номер первого кластера файла | |
Размер файла | |
Поле имени. Если имя содержит меньше 8 символов, то справа оно дополняется пустыми позициями.
Код 00 в первом байте поля имени показывает, что этот элемент каталога ранее не использовался. Тат как каталог заполняется последовательно, это означает, что и следующие за ним элементы не использовались. Это позволяет избежать лишнего поиска в каталоге. При стирании файла в первом байте соответствующего элемента каталога записывается код E5. все остальные байты элемента не изменяются. Сохраняемая в каталоге и FAT информация после удаления файла позволяет выполнять его восстановление, если занимаемое им ранее дисковое пространство не было выделено другому файлу.
|
|
Код 2E (символ «.») в первом байте показывает, что элемент описывает сам каталог. Если и второй байт содержит код 2E, то элемент описывает родительский каталог («..»).
Расширение имени. Если этот элемент описывает файл, то поле может быть пустым. В противном случае это поле используется, когда в элементе корневого каталога указывается метка тома.
Атрибуты файла. Каждый бит этого поля задает определенный атрибут, указанный в табл.ХХ.
№бита | Назначение |
Защищенный | |
Скрытый | |
Системный | |
Метка тома | |
Каталог | |
Архивный | |
Не используется | |
Не используется |
Табл.ХХ Состав байта атрибутов.
Поле «время». Его содержимое рассматривается как целое число без знака, полученное по следующей формуле: часы *2048 +минуты*32 + секунды\2.
Для выполнения обратного преобразования следует разделить содержимое поля на 2048, частное от деления даст нам часы. Деление остатка не 32 дает нам минуты, а полученный остаток при умножении его на 2 дает секунды.
Поле «дата». Содержимое его рассматривается как целое число без знака, полученное по следующей формуле: (год-1980)*512+месяц*32+день.
Следующая важная структура тома FAT — это сама таблица FAT, занимающая отдельную логическую область. Она определяет список (цепочку) кластеров, в которых размещаются файлы и папки тома. Между кластерами и индексными указателями таблицы имеется взаимно однозначное соответствие — N-й указатель соответствует кластеру с тем же номером. Первому кластеру области данных присваивается номер 2. Значение индексного указателя соответствует состоянию соответствующего кластера. Возможны следующие состояния:
|
|
- кластер свободен — указатель обнулен;
- кластер занят файлом и не является последним кластером файла — значение указателя — это номер следующего кластера файла;
- кластер является последним кластером файла — указатель содержит метку EOC (End Of Clusterchain), значение которой зависит от версии FAT: для FAT12 меткой EOC считается любое значение, большее или равное 0x0FF8 (по умолчанию 0x0FFF); для FAT16 — большее или равное 0xFFF8 (по умолчанию 0xFFFF); для FAT32 — любое значение, большее или равное 0x0FFFFFF8 (по умолчанию 0x0FFFFFFF);
- кластер поврежден — указатель содержит специальную метку, значение которой для FAT12 0x0FF7, для FAT16 0xFFF7 и для FAT32 0x0FFFFFF7. Поврежденный кластер не может использоваться файловой системой для хранения данных; соответствующие указатели не затрагиваются при форматировании тома, когда все остальные указатели обнуляются;
- кластер зарезервирован «для будущей стандартизации» — указатель содержит значение, превышающее CountofClusters, но меньшее метки поврежденного кластера (то есть до 0xFFF6 включительно для FAT16). В этом случае кластер, не соответствуя никаким реальным данным, считается занятым и пропускается при поиске свободного, но никакой другой информации о нём не предоставляется.