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

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

Удаление каталога

Вход: АН = 3Ah; DS:DX – ASCIZ-строка пути к удаляемому каталогу.

Выход: CF = 0 – АХ = не определен; АХ = код ошибки (CF = 1): 3 – несуществующий путь; 5 – доступ запрещен; 10h – попытка удаления текущего каталога. Удаляемый каталог должен быть пустым.

:prg07_16.asm – программа демонстрации удаления каталога функцией 3Аh.
.data
dname db "c:\windows\my_dir",О point_dname dd dname
.code
:----удалим каталог my_dir в каталоге c:\windows---------
Ids dx.point_dname;формируем указатель на строку с именем нового каталога
movah.3ah:номер функции DOS *
int 21h
jc exit;переход в случае ошибки

Изменить текущий каталог

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

Вход: АН = 3Bh; DS:DX – указатель на буфер, содержащий полный путь от корневого каталога в виде ASCIZ-строки (до 64 байт).

Выход: CF = 0 – АХ = не определен; CF = 1 – АХ = код ошибки: 03h – путь не найден.

:prg07_17.asm – программа демонстрации изменения текущего каталога функцией 3Bh.
.data
dname db "c:\windows",0
point_dname dd dname
.code
|………
:…..изменим текущий каталог на каталог c:\windows--------
Ids dx.point_dname:формируем указатель на строку с именем нового каталога
movah.3bh:номер функции DOS
int21h
jc exit.:переход в случае ошибки
;………

Получение текущего каталога

Вход: Ан = 47h;

DL = номер устройства (00h= текущее (по умолчанию),01h = А: и т. д.) DS:SI – указатель на 64-байтный буфер для записи полного пути от корневого каталога (ASCIZ-строка).

Выход: АХ = не определен или 0100h(CF=0); АХ = код ошибки (CF=1): OFh – недопустимый дисковод.

:prg07_18.asm – программа демонстрации получения текущего каталога функцией 47h.
.data
dname db "e:\tools".О
point_dname dd dname
d_cur_name db 64 dup (20h).0
point_d_cur_name dd d_cur_name
.code
:…..изменим текущий каталог на каталог \tools………..
Ids dx,point_dname;формируем указатель на строку с именем нового каталога
movah,3bh;номер функции DOS
int 21h
jc exit:переход в случае ошибки
:----получим текущий каталог……-----…..
Ids si,point_d_cur_name;формируем указатель на строку с именем нового каталога
mov ah.47h;номер функции DOS
int 21h
jc exit:переход в случае ошибки

Возвращаемый путь не содержит имени диска и первого символа \.

Последняя проблема, на которой мы остановимся в этом разделе, – проблема поиска файлов.

Для поиска в каталогах используется пара функций 4eh и 4fh. В имени искомого файла можно указывать символы шаблона * и ?. Совместное использование функций 4eh и 4fh подчинено следующему алгоритму. Первой вызывается функция 4eh. В качестве параметров ей передаются адрес ASCIZ-строки с путем к искомому файлу и комбинация его атрибутов. Имя файла может быть задано в виде шаблона. В случае успеха (cf=0), то есть при обнаружении первого подходящего шаблону файла, данная функция помещает его имя и расширение в область DTA со смещением leh от ее начала (см. таблицу ниже).

Далее можно либо открыть файл, либо продолжить поиск, но уже функцией 4fh. При работе с шаблоном функцию 4fh можно вызывать циклически, до тех пор пока в процессе перебора не будут просмотрены имена всех подходящих файлов. Об этом можно узнать по состоянию флага cf, которое должно стать равным 1 в случае, когда файлов, удовлетворяющих шаблону, в данном каталоге больше нет.

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