Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
кст LAB7.DOC
Скачиваний:
0
Добавлен:
21.09.2019
Размер:
97.28 Кб
Скачать

Имена файлов, каталогов или шаблонов для поиска должны записываться в asciiz-формате, то есть в конце имени указывается нулевой байт.

При чтении или записи файла операционная система поддерживает двухсловную переменную — указатель файла, указывающую на байт в файле, к которому осуществляется доступ. По мере обработки файла указатель файла смещается к следующим байтам. Специальная функция DOS позволяет задавать относительное или абсолютное положение указателя в файле.

Поиск группы файлов, имена которых удовлетворяют определенному шаблону, выполняется в два этапа. На первом этапе используется функция ’Найти первый файл’, при этом указывается шаблон, который может содержать путь к обрабатываемому каталогу и шаблонные символы ’*’ (последовательность допустимых символов произвольной длины) и ’?’ (любой допустимый символ в данной позиции). Если путь не указан, подразумевается текущий каталог (это справедливо и в других подобных случаях). Если файл не найден, устанавливается флаг CF, иначе информация о найденном файле записывается в область DTA. На втором этапе вызывается функция ’Найти следующий файл’, которая использует информацию из DTA после предыдущего поиска. Эта функция при каждом новом вызове находит следующий файл, удовлетворяющий первоначальному шаблону. Файлы находятся в порядке их следования в записи каталога. Подкаталоги не обрабатываются.

Наряду со служебной информацией, обеспечивающей возможность поиска очередного файла, в DTA записываются сведения об атрибутах, дате и времени модификации, размере найденного файла, а также имя файла (без пути) в формате ASCIIZ. Если длина имени с расширением составляет менее 12 байт, остаток поля заполняется нулями.

Ниже приведен пример простой программы, иллюстрирующей использование файловых функций. Осуществляются создание файла в текущем каталоге, запись в него текстовой строки и закрытие файла. (В простых программах, подобных этой, явное закрытие файла можно не производить, так функция 4Ch автоматически закрывает все открытые файлы перед возвратом управления операционной системе).

; Данные

fname db '1.txt', 0 ; ASCIIZ-имя файла

string db 'Данные' ; записываемая строка

len = $-string ; длина строки

ermes db 'Ошибка создания файла!'

; Код

assume cs:cod, ds:dat

b: mov ax, dat

mov ds, ax ; инициализация DS адресом сегмента данных

; Создадим файл

mov ah, 3Ch ; функция ’Создать файл’

lea dx, fname ; DS:DX -> ASCIIZ-имя

xor cx, cx ; без атрибутов

int 21h

jc er ; если ошибка – на обработку

; Запишем в файл строку

mov bx, ax ; сохраним дескриптор созданного файла

mov ah, 40h ; функция записи в файл или на устройство

lea dx, string ; DS:DX -> записываемая строка

mov cx, len

int 21h

; Закроем файл (в BX - дескриптор)

mov ah, 3Eh

int 21h

exit: mov ax, 4C00h

int 21h

; Обработка ошибки создания файла

er:

... ; вывод сообщения ermes

jmp exit

Возвращаемый функцией создания файла дескриптор сразу помещается в регистр BX, поскольку это требуется функцией записи. Функция записи не влияет на содержимое регистра BX, поэтому перед закрытием файла его можно не инициализировать заново — там и так находится нужный дескриптор.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]