Работа с дисками, каталогами и организация поиска файлов
Поиск файлов и каталогов
В Windows-версии MS DOS процесс поиска несколько отличается от рассмотреного выше. Для этого используются три функции и структура WIN32_FIND_DATA в памяти, в которой возвращается информация о файле. Для запуска процесса поиска вызывается функция 714eh – найти первый файл.
Вход: АН = 714eh;
CL – атрибуты искомых файлов (0000h – файл доступен по записи и чтению; 0001h – файл доступен по чтению; 0002h – скрытый файл; 0004h – системный файл; 0008h – метка тома; 00lOh – каталог; 0020h – архивный файл);
СН – дополнительные атрибуты искомых файлов (0000h – файл доступен по записи и чтению; 0001h – файл доступен по чтению; 0002h – скрытый файл; 0004h – системный файл; 0008h – метка тома; 00lOh – каталог; 0020h – архивный файл);
DS:DX – адрес ASCIIZ-строки с именем искомого файла или каталога. Допускаются оба типа имен – длинные и короткие. В именах допустимы символы шаблона * и ?;
ES-DI – адрес структуры WIN32_FIND_DATA, в которой будет возвращена информация о файле;
SI – формат, в котором возвращается дата и время (0 – дата и время возвращаются в 64-разрядном формате; 1 – дата и время возвращаются в формате MS DOS).
Выход: CF = 0 – успешное выполнение функции, в результате в регистрах АХ и СХ возвращается следующая информация:
АХ = дескриптор, использующийся далее для процесса поиска;
СХ = возможные значения: 0000 – все символы структуры WIN32_FIND_DATA, составляющие основное и альтернативное имя файла, успешно преобразованы из Unicode; 0001 – основное имя, возвращенное в структуре WIN32_FIND_DATA, содержит знаки подчеркивания на месте символов, не преобразованных из Unicode; 0002 – альтернативное имя, возвращенное в структуре WIN32_FIND_DATA, содержит знаки подчеркивания на месте символов, не преобразованных из Unicode;
CF = 1 – АХ = код ошибки при неудачном выполнении функции.
Вызов функции 714eh приводит к заполнению полей структуры WIN32_FIND_ DATA, после чего можно проанализировать ее поля. Основной интерес представляют поля основного (CfileName) и альтернативного (CaHernateFileName) имен. Их можно анализировать на предмет удовлетворения условиям поиска. Если необходимо продолжить поиск, вызывается функция 714fh – найти следующий файл. Если же поиск считается удачным либо его необходимо прекратить, то вызывается функция 71alh – прекратить поиск.
Ниже приведены порядок вызова функций 714fh и 71alh и формат структуры WIN32_FIND_DATA.
Вход: АН = 714fh; ВХ = дескриптор, полученный функцией 714eh;
ES:DI – адрес структуры WIN32FINDDATA, в которой будет возвращена информация о файле;
SI – формат, в котором возвращается дата и время (0 – дата и время возвращаются в 64-разрядном формате; 1 – дата и время возвращаются в формате MS DOS).
Выход: CF = 0 – успешное выполнение функции, в результате в регистрах АХ и СХ возвращается следующая информация:
СХ = возможные значения: 0000 – все символы структуры WIN32FINDDATA, составляющие основное и альтернативное имя файла, успешно преобразованы из Unicode; 0001 – основное имя, возвращенное в структуре WIN32FINDDATA, содержит знаки подчеркивания на месте символов, не преобразованных из Unicode; 0002 – альтернативное имя, возвращенное в структуре WIN32FINDDATA, содержит знаки подчеркивания на месте символов, не преобразованных из Unicode;
CF = 1 – АХ = код ошибки при неудачном выполнении функции.
Функция 714eh в отличие от аналогичных функций "старой" MS DOS использует не область DTA, а некоторый блок в памяти. Этот блок важно своевременно освобождать, для этого и предназначена функция 71alh.
Вход: АН = 71Alh; ВХ = дескриптор, полученный функцией 714eh.
Выход: CF = 0 – успешное выполнение функции;
CF = 1 – АХ = код ошибки при неудачном выполнении функции.