- •Работа с файловой системой
- •Содержание
- •1. Цель работы
- •2. Порядок выполнения работы
- •3. Структура каталогов файловых систем fat и vfat
- •Структура элемента каталога fat в Windows
- •Структура элемента каталога с длинным именем
- •4. Работа с файловой системой
- •4.1. Создание, открытие, чтение и запись в файл
- •4.2. Поиск файлов в dos
- •4.3. Поиск файлов в Windows
- •4.4. Опрос и изменение свойств файлов
- •4.4.1. Атрибуты
- •4.4.2. Дата и время последней модификации
- •4.5. Перемещение и удаление файлов
- •4.6. Работа с каталогами
- •5. Работа с параметрами командной строки
- •6. Пример
- •Текст программы
- •Библиографический список
- •Поиск файлов по дереву каталогов
- •Варианты заданий
4.2. Поиск файлов в dos
Функции поиска возвращают информацию о найденных файлах в области памяти DTA (Data Transfer Area). По умолчанию DTA располагается в PSP со смещения 0080h и имеет размер 128 байт.
Адрес начала DTA можно изменить функцией 1Ah прерывания INT 21h.
Вход: AH = 1Ah
DS:DX = адрес начала DTA (для поиска файлов в DOS достаточно DTA размером 43 байта)
Для поиска файлов в DOS используется две функции. Функция 4Eh (найти первый файл) вызывается один раз в начале поиска. Для последующего поиска используется функция 4Fh (найти следующий файл). Обе функции устанавливают CF=0, если файл найден, и CF=1 в противном случае.
Информация о найденных файлах размещается в области DTA в формате, приведенном в таблице 3.
Найти первый файл
Вход: AH = 4Eh
DS:DX = адрес ASCIIZ строки с масками для поиска.
Может включать путь и символы «*» и «?». Если путь не указан, поиск ведется в текущем каталоге.
CX = атрибуты (см. табл.1). Если бит 3 (метка тома)
установлен, все остальные биты игнорируются.
Независимо от значения битов 0 и 5 файлы с атрибутами архивный и только для чтения находятся при всех вариантах поиска. Файлы с атрибутами скрытый и системный ищутся, только если установлены соответствующие биты.
Выход: CF=0, если файл найден, и область DTA заполняется
данными;
CF=1, если ошибка, в AX код ошибки
(02h = файл не найден, 03h = путь не найден,
0Ch = неверный режим доступа,
12h = больше нет файлов).
Найти следующий файл
Вход: AH = 4Fh
Выход: CF=0, если файл найден, и область DTA заполняется
данными;
CF=1, если ошибка, в AX код (см. функцию 4Eh).
Таблица 3
Смеще-ние |
Размер, байт |
Описание | |
00h |
1 |
Идентификатор диска (A:\ =1, C:\=3 и т.д.; бит 7 – диск сетевой) |
Используется функцией 4Fh при следующем поиске
|
01h |
11 |
Маска поиска (без пути) | |
0Ch |
1 |
Атрибуты поиска | |
0Dh |
2 |
Порядковый номер файла в каталоге | |
0Fh |
2 |
Номер начального кластера каталога, в котором ведется поиск | |
11h |
4 |
Зарезервировано | |
15h |
1 |
Атрибут найденного файла | |
16h |
2 |
Время модификации файла в формате DOS (табл.1) | |
18h |
2 |
Дата модификации файла в формате DOS (табл. 1) | |
1Ah |
4 |
Размер файла в байтах | |
1Eh |
13 |
Имя с расширением найденного файла в формате ASCIIZ. Для файлов с длинными именами здесь возвращается алиас. |
4.3. Поиск файлов в Windows
Для поиска файлов с длинными именами в Windows используются три функции:
AX = 714Eh – найти первый файл;
AX = 714Fh – найти следующий файл;
AX = 71A1h – закончить поиск.
Эти функции поддерживаются, только если при загрузке Windows 95 запущен IFSmgr. Он всегда запускается при обычной установке, но отсутствует при загрузке с дискеты MS-DOS 7.0. Если функции поиска файлов не поддерживаются, то после их вызова CF=1 и AX=7100h.
Информация о файле помещается в 318-байтовый буфер, адрес которого передается функциям в ES:DI.
Функции определяют файлы как с длинными, так и с короткими именами, созданными в DOS. В последнем случае поле «короткое имя» в 318-байтовом буфере остается не заполненным.
Информация о найденных файлах помещается в буфер в формате, описанном в таблице 4.
Найти первый файл с длинным именем
Вход: AX = 714Eh
DS:DX = адрес ASCIIZ строки с масками для поиска
ES:DI = адрес 318-байтного буфера
SI = формат даты/времени (=0 – Windows, =1 – DOS)
CL = атрибуты, которые файл может иметь (см. функ. 4Eh)
CH = атрибуты, которые файл должен иметь
Выход: CF = 0 – файл найден:
AX= поисковый идентификатор (используется в функциях
714Fh и 71A1h),
CX = Unicode-флаг: бит 0 установлен – длинное имя
содержит подчеркивания вместо непреобразуемых Unicode-символов; бит 1 – короткое имя содержит подчеркивания вместо непреобразуемых Unicode-символов.
CF = 1 – ошибка, в АХ код ошибки (см. функцию 4Eh).
Найти следующий файл с длинным именем
Вход: AX = 714Fh
BX = поисковый идентификатор
ES:DI = адрес 318-байтного буфера
SI = формат даты/времени (=0 – Windows, =1 – DOS)
Выход: CF = 0 – файл найден:
CX = Unicode-флаг (см. функцию 714Eh).
CF=1 – ошибка, в АХ код ошибки (см. функцию 4Eh).
Закончить поиск файла с длинным именем
Вход: AX = 71A1h
BX = поисковый идентификатор
Выход: CF = 0 – если операция выполнена
CF = 1, если произошла ошибка (в AX код ошибки).
Функцию «Закончить поиск файла» не следует вызывать, если первый поиск оказался неудачным.
Таблица 4
Смеще-ние |
Размер, байт |
Описание |
00h |
4 |
Атрибуты файла: биты 0–6 соответствуют атрибутам файла DOS, бит 8 – временный файл |
04h |
8 |
Дата/время создания файла* |
0Ch |
8 |
Дата/время последнего доступа к файлу* |
14h |
8 |
Дата/время последней модификации файла* |
1Ch |
4 |
Старшее двойное слово длины файла |
20h |
4 |
Младшее двойное слово длины файла |
24h |
8 |
Зарезервировано |
2Ch |
260 |
Имя файла длинное в формате ASCIIZ |
130 |
14 |
Имя файла короткое (алиас) в формате ASCIIZ |