
- •Работа с файловой системой
- •Содержание
- •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.6. Работа с каталогами
Функции определения текущего каталога возвращают строку с путем в формате ASCIIZ. Строка не содержит имени диска и символов «\» в начале и в конце пути.
Определить текущий каталог
Вход: AH = 47h
DL = номер диска (00h – текущий, 01h – A: и т.д.)
DS:SI = буфер для текущего пути (64 байта)
Выход: CF = 1, если ошибка, код в AX (0Fh – неверный номер диска)
Определить текущий каталог с длинным именем
Вход: AX = 7147h
DL = номер диска (00h – текущий, 01h – A:,
DS:SI = буфер для пути (обычно 260 байт)
Выход: CF = 1, если ошибка, код в AX (0Fh – неверный номер диска)
Определить текущий диск
Вход: AH = 19h
Выход: AL=номер диска (0=A, 1=B, 2=C и т.д.)
Для преобразования номера диска в символ прибавить ‘A’ (65h).
Функции смены текущего каталога получают имя нового каталога в ASCIIZ строке, адрес которой передается в DS:DX. Если имя диска отсутствует, то принимается текущий диск. Для перехода на один уровень вверх вместо имени каталога указывается «..».
Установить текущий каталог
Вход: AH = 3Bh
DS:DX = строка с путем, который должен стать текущим
Выход: CF=0 – текущий каталог изменен
CF = 1, если ошибка, код в AX (03h – путь не найден)
Установить текущий каталог с длинным именем
Вход: AX = 713Bh
DS:DX = строка с путем, который должен стать текущим
Выход: CF=0 – текущий каталог изменен
CF = 1, если ошибка, код в AX (03h – путь не найден)
Установить текущий диск
Вход: AH = 0Eh
DL = номер диска (0=A, 1=B, 2=C и т.д.)
Выход: AL=общее количество дисков в системе (фактически установленных и потенциально возможных, как диск В:
в системе с одним FDD)
Если в DL указан диск, к которому нет доступа (например, не вставлена дискета или CD-ROM, вызывается критическая ошибка INT 24h).
Функции создания, перемещения и удаления файлов не применимы к каталогам. Для подобных операций над каталогами существуют специальные функции.
Создать каталог DOS
Вход: AH = 39h
DS:DX = адрес ASCIIZ строки с путем (до 64 байт)
Путь должен содержать имя диска (или первым символом обозначение корневого каталога «\»), уже существующие каталоги и оканчиваться именем каталога, который требуется создать (символ «\» в конце пути не нужен). Если диск не указан, путь отсчитывается от текущего каталога.
Выход: CF=0, если каталог создан;
CF=1, если ошибка, код в AX (03h – путь не найден,
05h – доступ запрещен)
Ошибка с кодом 05h возвращается, если каталог с указанным именем уже существует.
Создать каталог с длинным именем
Вход: AX = 7139h
DS:DX = адрес ASCIIZ строки с путем (до 260 байт)
Выход: CF=0, если каталог создан;
CF=1, если ошибка, код в AX (03h – путь не найден,
05h – доступ запрещен/каталог уже существует)
Функции удаления каталогов удаляют только пустые каталоги. В противном случае они возвращают ошибку с кодом 05h (доступ запрещен).
Удалить каталог DOS
Вход: AH = 3Ah
DS:DX = адрес ASCIIZ строки с путем (до 64 байт)
Последний каталог из пути будет удален (символ «\» в конце пути не указывается).
Выход: CF=0, если каталог удален;
CF=1, если ошибка, код в AX (03h – путь не найден,
05h – доступ запрещен, 10h – попытка удалить текущий каталог)
Удалить каталог с длинным именем
Вход: AX = 713Ah
DS:DX = адрес ASCIIZ строки с путем.
Последний каталог из пути будет удален (символ «\» в конце пути не указывается).
Выход: CF=0, если каталог удален;
CF=1, если ошибка, код в AX (03h – путь не найден,
05h – доступ запрещен, 10h – попытка удалить текущий каталог)