Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SP_MET_2.DOC
Скачиваний:
13
Добавлен:
02.05.2019
Размер:
689.66 Кб
Скачать
      1. Управление файловой системой

Начиная с MS-DOS 2.0, файловая система организована в виде каталогов, которые могут содержать файлы и другие каталоги (подкаталоги), образуя иерархическое дерево каталогов. В течение всей работы DOS один из каталогов является текущим, путь к этому каталогу не обязательно указывать для находящихся в нем (относящихся к нему) файлов. Дерево "произрастает" из корневого каталога, единственного для одного раздела и обозначаемого как "имя_раздела:\" (например, С:\) или просто как "\".

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

Функция DOS 39h Создать каталог

Ввод: АН = 39h

DS:DX = адрес ASCIZ-строки с путем (именем каталога), в котором все каталоги, кроме последнего, существуют. Для версии DOS 3.3 и более ранних длина всей строки не должна превышать 64 байта

Вывод: CF = 0, если каталог создан

CF = 1 и АХ = 3, если путь не найден, 5, если доступ запрещен

Функция LFN 39h Создать каталог с длинным именем

Ввод: AX = 7139h

DS:DX = адрес ASCIZ-строки с путем (именем каталога)

Вывод: CF = 0, если каталог создан; иначе:

CF = 1 и АХ = код ошибки (7100h, если функция не поддержи­вается)

Функция DOS 3Ah — Удалить каталог

Ввод: АН = 3Ah

DS:DX = адрес ASCIZ-строки с путем, последний каталог в котором будет удален (только если он пустой, не являет­ся текущим, не занят командой SUBST)

Вывод: CF = 0, если каталог удален; иначе:

CF = 1 и АХ = код ошибки (3, 5 или 10h)

Функция LFN 3Ah — Удалить каталог с длинным именем

Ввод: АХ = 713Ah

DS:DX = адрес ASCIZ-строки с путем

Вывод: CF = 0, если каталог удален; иначе:

CF = 1 и АХ = код ошибки

Функция DOS 47h Определить текущий каталог

Ввод: АН = 47h

DL = номер диска (00h — текущий, 0lh — А: и т. д.)

DS:SI = адрес 64-байтного буфера для текущего пути (ASCIZ-строки без имени диска, первого и последнего символа «\»)

Вывод: CF = 0 и АХ = 0100h, если операция выполнена

CF = 1 и АХ = 0Fh, если указан несуществующий диск

Функция LFN 47h — Определить текущий каталог с длинным именем

Ввод: АХ = 7147h

DL = номер диска

DS:SI = буфер для пути (ASCIZ-строки без имени диска, пер­вого и последнего символа «\». Может содержать не только длинные имена — возвращается тот путь, который использовался при последней смене текущего каталога)

Вывод: CF = 0, если операция выполнена; иначе:

CF = 1 и АХ = код ошибки

Функция DOS 3Bh Сменить текущий каталог

Ввод: АН = 3Bh

DS:DX = адрес 64-байтного ASCIZ-буфера с именем нового текущего каталога

Вывод: CF = 0, если каталог установлен как текущий; иначе:

CF = 1 и АХ = 3 (путь не найден)

Функция LFN 3Вh — Сменить каталог с длинным именем

Ввод: АХ = 713Bh

DS:DX = адрес ASCIZ-буфера с путем к новому текущему каталогу

Вывод: CF = 0, если каталог установлен как текущий; иначе:

CF = 1 и АХ = код ошибки

Перед работой с любыми функциями LFN следует один раз вызвать подфункцию A0h, чтобы определить размеры буферов для имен файлов и путей.

Функция LFN A0h Получить информацию о разделе файловой системы VFAT

Ввод: АХ = 71A0h

DS:DX = адрес ASCIZ-строки с именем раздела и символом "\" (например, "С:\")

ES:DI = адрес буфера для имени файловой системы (FAT, NTFS, CDFS)

СХ = размер буфера по адресу ES:DI (обычно достаточно 32 байта)

Вывод: СХ = 0, АХ = 0000h или 0200h

ВХ = флаги файловой системы:

бит 0: функции поиска учитывают регистр символов

бит 1: регистр символов сохраняется для имен директорий

бит 2: используются символы Unicode

бит 14: поддерживаются функции LFN

бит 15: включено сжатие раздела (DoubleSpace)

СХ = максимальная длина имени файла (обычно 255)

DX = максимальная длина пути (полного имени файла) (обычно 260)

CF = 1 и АХ = код ошибки, если произошла ошибка (7100h, если функция не поддерживается)

Кроме того, для проверки, поддерживается ли некоторая функция LFN, при ее вызове можно установить CF в 1. При работе программы в среде DOS старых версий CF останется установленным, а в среде DOS новых версий (в случае отсутствия какой-либо другой ошибки) — обнулится.

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