Работа с дисками, каталогами и организация поиска файлов
Поиск первого соответствующего шаблону файла
Вход: АН = 4Eh; СХ = атрибуты файла (биты 0 и 5 игнорируются); DS:DX – ASCIZ-имя файла (возможно, с путем к нему и символами шаблона * и?).
Выход: если CF – 0, то в DTA возвращается блок данных для первого найденного файла (см. ниже). Если CF – 0, то в АХ – код ошибки: 2 – файл не най" ден; 3 – несуществующий путь; 12h – больше файлов в каталоге нет.
Область DTA (Data Transfer Area) располагается в префиксе программист сегмента со смещением 80h от его начала и занимает 128 байт.
При успешном окончании поиска функция 4Eh (и 4Fh тоже) помещает блок данных, имеющий приведенный ниже формат.
Смещение | Размер в байтах | Описание |
---|---|---|
00h | 1 | Буква логического диска, если бит 7 = 0, то удаленный диск |
01h | 11 | Поисковый шаблон |
0Сh | 1 | Атрибуты поиска |
0Dh | 2 | Порядковый номер файла в каталоге |
0Fh | 2 | Номер кластера начала каталога предыдущего уровня |
11h | 4 | Резерв |
15h | 1 | Атрибуты найденного файла |
16h | 2 | Время создания (модификации) файла |
18h | 2 | Дата создания файла |
1Ah | 4 | Размер файла |
1Eh | 13 | ASCIZ-имя файла с расширением |
После анализа данной области в программе принимается решение об окончании или продолжении поиска.
В качестве шаблона можно задать символы *.*, тогда мы сможем получить имена и проанализировать все файлы в текущем каталоге. Это может понадобиться при программировании операции перемещения или копирования каталога.
Найти следующий соответствующий шаблону файл
Вход: АН = 4Fh; в области DTA должен содержаться блок данных, заполненный единственным вызовом 4eh в начале поиска.
Выход: если CF = 0 – успех; если CF = 1 – в АХ = код ошибки: 12h – больше файлов в каталоге нет.
Для работы с DTA в системе MS DOS существуют две функции lah и 2fh. После старта программы текущей DTA является область по адресу PSP:OO8Oh. Мы уже имели с ней дело, когда рассматривали проблему обработки содержимого командной строки.
Получить адрес области DTA
Для выполнения работы, связанной с файлами, MS DOS предоставляет возможность установить свою область DTA.
Вход: АН = 2Fh.
Выход: ES:BX – адрес области, которую впоследствии функцией lah можно сделать текущей областью DTA для последующих операций ввода-вывода.
Установить текущую область DTA
Вход: АН – 1Ah; DS:DX – адрес области, которая будет областью DTA для последующих файловых операций.
Понятно, что даже если мы устанавливаем свою область DTA, все смещения и данные, формируемые функциями 4Eh 4Fh, остаются актуальными.