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

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

Поиск файлов и каталогов

В 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 – АХ = код ошибки при неудачном выполнении функции.

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