Создание каталога
Вход: АН = 39h; DS:DX — ASCIZ-строка пути к создаваемому
каталогу. Выход: АХ = не определен (CF ¦ 0); АХ - код ошибки (CF = 1): 3
— несуществующий путь; 5 — доступ запрещен.
Путь к каталогу должен содержать перечисление всех каталогов начиная
от корневого на пути к создаваемому каталогу, при этом они, естественно,
должны существовать. Последнее имя каталога — имя создаваемого
каталога.
;prg07_15.asm - программа демонстрации создания каталога функцией 39h.
.data
dname db "c:\windows\my_diг".0
point_dname dd dname
.code
;.....создадим каталог в каталоге c:\windows.......-.......
Ids пате;формируем указатель на строку с именем нового каталога
movah,39h :номер функции DOS
int 21h
jc exit ;переход в случае ошибки
Удаление каталога
Вход: АН = 3Ah; DS:DX — ASCIZ-строка пути к удаляемому каталогу. Выход: CF = 0 — АХ = не определен; АХ = код ошибки (CF = 1): 3 — несуществующий путь; 5 — доступ запрещен; 10h — попытка удаления текущего каталога. Удаляемый каталог должен быть пустым.
:prg07_16.asm - программа демонстрации удаления каталога функцией ЗАп.
.data
dname db "c:\windows\my_diг",О 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 - программа демонстрации изменения текущего каталога функцией ЗВп.
.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 в случае, когда
файлов, удовлетворяющих шаблону, в данном каталоге больше нет.