Перечень функций прерывания 21h, работающих с файлами, которые имеют длинные имена и соответствующие функции API Win32.
Функция DOS 47h — Определить текущий каталог
Определить текущий каталог
Функция DOS 3Ah — Удалить каталог
Удалить каталог
Функция DOS 39h — Создать каталог
Создать каталог
Для переименования имеющегося файла предусмотрена функция 56h. Она требует указания двух спецификаций файла - исходной, чтобы можно было его найти, и новой, присваиваемой файлу.
Переименование имеющегося файла
Если в обеих спецификациях указан один и тот же путь к файлу (или имеется только имя файла), осуществляется его переименование; если же пути различаются, функция выполняет перенос файла в другой каталог. Перенос файла в другой каталог не требует копирования файла на другое место диска; файл остается на том же месте, изменяются только записи об этом файле в каталогах.
Адрес исходной спецификации должен содержаться в регистрах DS:DX; адрес новой спецификации - в регистрах ES:DI.
Пример 8.Переименование файла
; В сегменте команд
push DS ; Настроим ES на
pop ES ;наш сегмент данных
mov AH,56h ;Функция переименования
mov DX,offset fname1 ;Исходная спецификация
mov DI,offset fname2 ;Новая спецификация
int 21h
;B сегменте данных
fnamel db 'myfile.txt',0
fname2 db 'myfile0l.txt',0
На самом низком уровне каталог — тот же файл, в атрибуте которого бит 4 установлен в 1 и который содержит список имен вложенных файлов, их атрибутов и физических адресов на диске.
Ввод:
АН = 39h
DS:DX = адрес ASCIZ-строки с путем, в котором все каталоги, кроме последнего, существуют.
Вывод:
CF = 0, если каталог создан
CF = 1 и АХ = 3, если путь не найден, 5 — если доступ запрещен
Ввод:
АН = 3Ah
DS:DX = адрес ASCIZ-строки с путем, последний каталог в котором будет удален (только если он пустой, не является текущим)
Вывод:
CF = 0, если каталог удален
CF = 1 и АХ = 3, если путь не найден, 5 — если доступ запрещен, 10h — если удаляемый каталог — текущий
Ввод:
АН = 47h
DL = номер диска (00h — текущий, 01h — А: и т.д.)
DS:SI = 64-байтный буфер для текущего пути(ASCIZ-строка без имени диска, первого и последнего символа «\»)
Вывод:
CF = 0 и АХ = 0100h, если операция выполнена
CF = 1 и АХ = 0Fh, если указан несуществующий диск