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

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

Получить полный путь

Вход: АН = 7160h; CL = 0; СН – содержимое результата (СН = 80 – получить имя диска; СН = 0 – получить полный путь);

DS:SI – адрес ASCIIZ-строки с именем файла или каталога, для которых необходимо получить полный путь. Допускаются оба типа имен – длинные и короткие;

ES:DI – адрес строки, в которую необходимо записать полный путь. Размер буфера должен быть достаточным для размещения пути максимальной длины (функция 71a0h).

Выход: CF = 0 – успешное выполнение функции, в результате чего полный путь от корневого каталога в виде ASCIZ-строки записывается в буфер, адрес которого указан в ES:DI;

CF = 1 – АХ = код ошибки.

;prg07_24.asm – программа демонстрации применения функции 7160h (CL=0)
;прерывания 21h для получения полного пути.
.data
filename db 'my_file with long name.txt'.O
point_fname dd filename
PathFull db 260 dup (0)
point Path dd PalhFull
.code
Ids si.pointfname:формируем указатель на имя файла
les di,point_Path Нормируем указатель на буфер для полного пути
mcvax.7l60h;номер функции DOS
movch,80h:CH=80h – получить имя: диска; СН=0 – получить полный путь
movCL.O;получить полный путь
int 21h
jc exit

Данная функция работает очень примитивно – при указании имени файла или относительного пути (с символами *"." и "..") она не проверяет его существование, а лишь добавляет к нему имя текущего диска и каталога. Поэтому при использовании этой функции требуются другие средства, позволяющие контролировать реальное наличие файла или шути на диске.

Получить полный путь с краткими именами (в формате 8.3)

Вход: АН = 7160h; CL = 1; СН – содержимое результата (СН = 80 – получить имя диска; СН = 0 – получить полный путь);

DS:SI – адрес ASCIIZ-строки с именем файла или каталога, для которых необходимо получить путь в короткой форме. Допускаются оба типа имен – длинные и короткие;

ES:DI – адрес строки, в которую необходимо записать полный путь. Размер буфера должен быть достаточным длят размещения пути максимальной длины (функция 71a0h).

Выход: CF = 0 – успешное выполнение функции, в результате чего полный путь от корневого каталога в виде /ASCIZ-строки записывается в буфер, адрес которого указан в ES: DI;

CF = 1 – АХ = код ошибки.

:prg07_25.asm – программа демонстрации применения функции 7160h (CL=1)
;прерывания 21h для получения полного путии с краткими именами (в формате 8.3)
filename db 'my_file with lorg name.:.txt'.0
point_fname dd filename
PathFUll db 260 аир (О)
pointjath dd PathFull
* Ids si.pointjfname формирует указатель на имя файла lesdi.point_Path
;сформируем учазатель на буфер для полного пути
movax.7160h:номер функции DOS
movch.80h;CH"80h – получить имя диска; СН=0 – получить полный путь
movCL.l:получить полный путь с краткими именами

На выходе функция формирует строку, содержащую полный путь, причем все длинные компоненты этого пути заменяются их краткими псевдонимами, удовлетворяющими схеме 8.3. Данный вариант функции (при CL = 1) в отличие от ее предыдущего варианта, производит проверку наличия файла или пути.

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