Иллюстрированный самоучитель по задачам и примерам Assembler

Работа с дисками, каталогами и организация поиска файлов

Получить информацию о томе

Вход: АН = 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).

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.