Сборник по задачам и примерам Assembler



         

Поиск файлов и каталогов - часть 3


/p>

Приведем пример поиска файла по шаблону. Для этого предварительно создадим несколько файлов в соответствии с шаблоном file*.*. Среди этих файлов должен быть файл file_O5.txt. В отладчике проследим за тем, как изменяется

содержимое области памяти, отведенное для экземпляра структуры WIN32_FIND_ DATA. Выход из программы — при обнаружении файла file_5.txt

:prgO7_28.asm - программа демонстрации поиска файла по шаблону.

WIN32_FIND_DATA -uc

DwFlleAttributes dd ?

FtCreationTime dd 2 dup(?)

FtLastAccessTime dd 2 dup(?)

FtLastWriteTime dd 2 dup(?)

NFileSizeHigh dd ? .размер файла в байтах (старшее слово)

NFileSizeLow dd ? .размер файла в байтах (младшее слово)

DwReservedO dd 0 ;резерв

DwReservedl dd 0 :резерв

CFileName db 260 dup(?)

CAlternateFileName db 14 dup(?)

WIN32_FIND_DATA ends

.data

find_ WIN32_FIND_DATA <>

point_find_ dd find_

f_name_pattern db 'file_*.*'.O

point_f_name_pattern dd f_name_pattern

filename db 'file_05.txt',0 :искомый файл

1e*n_fi1ename=$-fi1ename

handle dw 0

movCL.O ;атрибуты искомого файла

movch.O ;дополнителные атрибуты для поиска

Ids dx,point_f_name_pattern ;формируем указатель на строку с шаблоном

les di.point_find_;формируем указатель на экземпляр структуры WIN32_FIND_DATA

movax.714eh :номер функции DOS

int 21h

jc exit

;в ах был возвращен дескриптор - если нужно, то его необходимо сохранить:

mov handle.ax

:проверяем, тот ли это файл: ml: mov ex.1en_fi1ename

lea di.find_.CfileName

lea si .filename repe empsb

jz exit ;продолжаем поиск - в Ьх дескриптор, полученный от 714eh:

mov bx.handle

les di.point_find_ :формируем указатель на экземпляр структуры WIN32_FIND_DATA

mov ax.714fh :номер функции DOS

хог si.si :формат даты

int 21h

jnc ml exit: завершить поиск

mov ax.71alh

mov bx.handle

int 21h

В отладчике хорошо видно, что выход из данной программы происходит в двух случаях:

  • когда файл найден, выход из программы производится в результате сравнения командой empsb (флаг ZF устанавливается в 1);
  • когда файлов, удовлетворяющих шаблону, нет, функция поиска 714еп и 714fh завершается неудачей (флаг CF устанавливается в 1).
  • В качестве шаблона можно задать символы *.*, тогда мы сможем получить имена и проанализировать все файлы в текущем каталоге. Это может понадобиться при программировании операции перемещения или копирования каталога.

    Остальные функции работы с файлами, предназначенные для записи/чтения/позиционирования, остались прежними.

     




    Содержание  Назад  Вперед