4.8.5. Управление файловой системой

Начиная с MS DOS 2.0 файловая система организована в виде директорий. Поиск файлов выполняется только в пределах текущей директории, а создание и удаление файлов неприемлемы к директориям, хотя на самом низком уровне ди­ректория - тот же файл, в атрибуте которого бит 4 установлен в 1 и который содер­жит список имен вложенных файлов, их атрибутов и физических адресов на диске.

Функция DOS 39k Создать директорию Вход:    АН = 39h

DS:DX = адрес ASCIZ-строки с путем, в котором все директории, кро­ме последней, существуют. Для DOS 3.3 и более ранних вер­сий длина всей строки не должна превышать 64 байта Выход: CF = 0, если директория создана

CF = 1 и АХ = 3, если путь не найден; 5, если доступ запрещен

Функция Создать директорию с длинным именем

Вход:    АХ - 7139h

. DS:DX = адрес ASCIZ-строки с путем Выход: CF = 0, если директория создана

CF = 1 и АХ = код ошибки (7100h, если функция не поддерживается)

Функция DOS ЗАк Удалить директорию Вход:    АН = 3Ah

DS:DX = адрес ASCIZ-строки с путем, где последняя директория будет удалена (только если она пустая, не является текущей, не занята командой SUBST) Выход:  CF = 0, если директория удалена

CF = 1 и АХ = 3, если путь не найден; 5, если доступ запрещен; 10h, если удаляемая директория - текущая

Функция LFN ЗАh: Удалить директорию с длинным именем Вход:    АХ = 713Ah

DS:DX   адрес строки с путем Выход: CF - 0, если директория удалена, иначе CF - 1 и АХ = код ошибки

Функция DOS 47k. Определить ' текущую директорию Вход:    АН = 47h

DL = номер диска (00h - текущий, Olh - А и т.д.) DS:SI = буфер для текущего пути без име-

ни диска, первого и последнего символа \) Выход: CF = 0 и АХ = OlOOh, если операция выполнена

CF = 1 и АХ = OFh, если указан несуществующий диск

Функция LFN47h: Определить текущую директорию с длинным именем-

Вход:   AX = 7147h

DL = номер диска

DS:SI = буфер для пути (ASCIZ-строка без имени диска, первого и пос­леднего символа \. Необязательно содержит лишь длинныеимена - возвращается тот путь, который использовался при последней смене текущей директории.) Выход: CF = 0, если директория определена, иначе CF = 1 и АХ = код ошибки

Функция DOS 3Bh: Сменить директорию Вход:   АН = ЗВЬ

DS:DX = адрес 64-байтного ASCIZ-буфера с путем, который станет те­кущей директорией

Выход: CF = 0, если директория изменена, иначе CF = 1 и АХ = 3 (путь не найден)

Функция LFN3B: Сменить директорию с длинным именем Вход:    АХ = 713Bh

DS:DX = адрес ASCIZ-буфера с путем Выход: CF = 0, если директория изменена, иначе CF = 1 и АХ = код ошибки

Перед работой с любыми функциями LFN следует один раз вызвать подфунк­цию OAOh, чтобы определить размеры буферов для имен файлов и путей.

Функция LFNOAOh: Получить информацию о разделе файловой системы VFAT Вход:    АХ - 71A0h

DS:DX = адрес ASCIZ-строки с именем раздела (например: db » С:\" ,0) ES:DI = адрес буфера для имени файловой системы (FAT, NTFS, CDFS) СХ = размер буфера в ES:DI (обычно 32 байта) Выход:  СХ = О, АХ = OOOOh или 0200h ВХ = флаги файловой системы:

бит 0: функции поиска учитывают регистр символов

бит    регистр символов сохраняется для имен директорий

бит 2: используются символы Unicode

бит 14: поддерживаются функции LFN

бит 15: включено сжатие раздела (DoubleSpace)

СХ = максимальная длина имени файла (обычно 255)

DX = максимальная длина пути (обычно 260) в Windows 95 SP1 воз­вращает OOOOh для CD-ROM

CF = 1 и АХ = код ошибки, если произошла ошибка (7100h, если фун­кция не поддерживается)

Крометого, при вызове любой функции LFN следует устанавливать CFb 1 для совместимости с ранними версиями DOS. Старые версии DOS не изменяли так что в функция не поддерживается, CF останется равным 1.