Работа с файлами в MS DOS (имена 8.3). Создание, открытие, закрытие и удаление файла.
В основе файловой системы MS DOS лежит древовидная структура каталогов. Корень этой структуры представляет собой совокупность ограниченного числа дескрипторов, описывающих файлы и каталоги (подкаталоги) следующего уровня. Подкаталог представляет собой файл особого типа, который содержит дескрипторы файлов и подкаталогов очередного нижележащего уровня. В отличие от корневого каталога количество дескрипторов в подкаталоге не ограничено и определяется только размером диска. Дескриптор представляет собой экземпляр структуры размером 32 байта. Поля этой структуры содержат различную информацию о файле: идентификатор файла и его характеристики – дата и время создания (модификации), номер начального кластера, длина файла и его атрибуты.
Для использования файла в программе необходимо выполнить следующие операции:
- создание нового файла;
- открытие существующего файла;
- запись/чтение в/из файл(а);
- закрытие файла.
Операционная система MS DOS поддерживает эти операции с помощью набора функций прерывания 21h. Кроме этих функций данное прерывание содержит функции для работы с каталогами:
- создать каталог;
- удалить каталог;
- сменить каталог.
Существует также ряд других функций для работы с файловой системой, в том числе для поиска файлов и получения информации о них.
Прежде чем использовать файл в программе, его необходимо открыть с помощью функции 3dh прерывания 21h. Если файл не существует, то перед открытием его нужно создать. Оба эти действия выполняются одной из следующих функций: 3ch, 5bh, 5ah, 6ch.
Создание файла с усечением существующего до нулевой длины
Вход: АН = 3Ch; CX = атрибуты файла (значения битов: 0=1 – только чтение; 1= 1 – скрытый файл; 2=1 – системный файл; 3=0 – игнорируется; 4=0 – зарезервирован (каталог), должен быть равен 0; 5 – бит архивации; 6= 0 – резерв; 7=1 – общий файл в системе Novell Netware; 8…15=0 – резерв); DS:DX – ASCIZ-имя файла. Выход: CF=O – АХ = дескриптор файла; CF=1 – АХ = код ошибки (3 – нет такого пути; 4 – нет свободного дескриптора файла; 5 – доступ отказан). хоr сх.сх:атрибуты файла – обычный файл Ids dx,point_fname: :формируем указатель на имя файла movah.5bh:номер функции DOS int21h открываем файл jnc ml: обойдем открытие файла moval,02h;режим доступа movah.3dh;номер функции DOS int 21h: открываем файл jc exit:переход, в случае ошибки mi::действия при успешном открытии файла: mov handle.ax:сохраним дескриптор файла
Открытие или создание файла с расширенными возможностями
Функция 6Ch появилась в последних версиях MS DOS (DOS 4.0+). С ее появлением устраняется необходимость отслеживать существование создаваемого файла. Для корректной работы достаточно задать нужные значения в соответствующих регистрах. Анализ возможных значений показывает, что данная функция фактически заменяет существовавшие до этого функции создания и открытия файлов.
Вход: АХ = 6C00h; BL = флаги – режим открытия (значения битов: 7 – наследование; 4-6 – режим разделения; 3=0 – резерв; 0-2 – режим доступа); ВН = флаги (значения битов: 6=0 – использовать стандартную для MS DOS буферизацию; 6=1 – отменить стандартную для MS DOS буферизацию; 5=0 – использовать обычный обработчик ошибок (int 24h); 5=1 – не использовать обычный обработчик ошибок (int 24h), :для выяснения причины ошибки использовать функцию 59h int 21h); CX = атрибуты создаваемого (и только) файла; DL = действия, если файл существует или не существует ;(значения бит: 0-3 – действие, если файл существует (0000 – вернуть ошибку; 0001 – открыть файл; 0002 – открыть файл без сохранения существующего); 4-7 – действие, если файл не существует (0000 – вернуть ошибку; 0001 – открыть файл; 0002 – создать и открыть файл); DH = 00h – резерв; DS:SI – адрес строки с ASCIZ-именем файла. Выход: CF = 0 – успешное выполнение функции: АХ = дескриптор файла, СХ = состояние: ;(0 – файл открыт; 1 – файл создан и открыт; 2 – файл открыт без сохранения содержимого существующего файла); CF = 1 – АХ = код ошибки.