Как отличить каталог и запись файла в fat16?
Если в системе fat16 я очень запутался в различении подкаталога и файла. Поскольку подкаталог и файл имеют схожую структуру, как мы можем различить каталог и файл и как нам пройти через каталоги, чтобы добраться до файла?
Сначала я думал, что все записи каталога будут начинаться с '0x2e' как 1-го байта соглашения по именованию в 8.3 в fat16. Но практически я не смог найти все каталоги, начинающиеся с 0x2e, но непосредственно имя каталога. Итак, как я могу отличить каталог и файл в fat16?
1 ответ
Каталоги имеют бит 0x10, установленный в поле атрибута; файлов нет. Первый байт "." (0x2E) для каталогов self и parent, если они есть (которых они не находятся в корне).
Содержимое каталога "файл" представляет собой массив записей каталога.
Игнорирование длинных имен файлов, способ поиска файла:
- SearchDirectory = root
- Парсинг 8.3 имени с оставшегося пути
- DirectoryEntry = Искать имя 8.3 в SearchDirectory
- Если оставшийся путь пуст, то DirectoryEntry является запрошенным объектом
- Если Directory.Attribute & 0x10 == 0, то ERROR (ожидается каталог)
- SearchDirectory = DirectoryEntry.contents
- Goto 2