Работа с дисками, каталогами и организация поиска файлов
Получить информацию о томе
Вход: АН = 71A0h;
DS:DX – адрес ASCIZ-строки с именем корневого каталога диска, о котором необходимо получить информацию (С:\);
ES:DI – адрес буфера, в который будет помещена ASCIZ-строка с именем файловой системы;
СХ = размер буфера, в который будет помещена ASCIZ-строка с именем файловой системы.
Выход: CF = 0 – успешное выполнение, при этом в буфер по адресу в ES-DI помешается ASCIZ-строка с именем файловой системы и устанавливаются следующие регистры:
- ВХ =* флаги файловой системы (комбинация значений: 0001 – при поиске учитывается регистр букв в именах файлов; 0002 – файловая система сохраняет регистр букв в элементах каталога; 0004 – использование символов Unicode в именах каталогов и файлов; 4000 – файловая система поддерживает длинные имена файлов и функции для работы с ними; 8000 – том сжат);
- СХ = максимально допустимая длина имени файла на данном томе без последнего нулевого символа (до 255);
- DX = максимально допустимая длина пути для данного тома, включая последний нулевой символ (до 260);;1. _.,
Создание каталога
Вход: АН = 7139h; DS:DX – адрес строки с ASCIZ-именем существующего файла.
Выход: CF = 0 – при успешном переименовании; CF = 1 – АХ = код ошибки: 3 – несуществующий путь; 5 – доступ запрещен.
Удаление каталога
Удаляемый каталог должен быть пуст.
Вход: АН = 713Ah; DS:DX – ASCIZ-строка пути к удаляемому каталогу.
Выход: CF = 0 – АХ = не определен; CF = 1 – АХ = код ошибки: 3 – несуществующий путь; 5 – доступ запрещен; 10h – попытка удаления текущего каталога.
Изменить текущий каталог
Понятие текущего каталога аналогично тому, что приводилось выше при рассмотрении функций для работы с файлами, имеющими короткие имена.
АН = 713Bh; DS:DX – указатель на буфер, содержащий полный путь от кор. невого каталога в виде ASCIZ-строки и в качестве последнего элемента включающий имя нового текущего каталога (естественно, что допустимы длинные имена с ограничениями по максимальной длине (см. функцию 71a0h)).
Выход: CF = 0 – АХ – не определен; CF=0 – АХ = код ошибки: 03h – путь не найден.
Получение текущего каталога
Вход: АН = 7147h; DL – номер устройства (00h = текущее (заданное по умолчанию), 01h = А: И т. д.);
DS:SI – указатель на буфер для записи полного пути от корневого к текущему каталогу (длина буфера должна быть не менее длины, возвращаемой в регистре DX функцией 71a0h).
Выход: CF = 0 – успешное выполнение функции, в результате чего полный путь от корневого каталога в виде ASCIZ-строки без имени диска и символа \ записывается в буфер, адрес которого указан в DS:SI;
АХ – код ошибки (CF = 1): OFh – недопустимый дисковод.
Среди новых функций, работающих в том числе с длинными именами файлов, существует функция 7160h, позволяющая получить полные пути для указанных файлов или относительных путей: получить полный путь (сх = 0), получить полный путь с краткими именами (сх = 1), получить полный путь с длинными именами (сх = 2).