9. функции DOS для работы с файлами и каталогами
9. ФУНКЦИИ DOS ДЛЯ РАБОТЫ С ФАЙЛАМИ И КАТАЛОГАМИ
В ранних версиях DOS для обработки файлов использовались так называемые блоки управления файлами – FCB (File Control Block). Использование блоков управления файлами вызывало определенные сложности и неудобства. Например, нельзя было создать файл с указанием путей – можно было только указывать имя файла. В DOS, начиная с версии 2. 0, появились новые расширенные функции для работы с файлами, упрощающие выполнение стандартных операций. Для новых версий DOS рекомендуется использовать именно эти функции. При использовании многих расширенных функций для файловых операций необходимо указать адрес строки в формате ASCIIZ, содержащей пути и имя файла. Строка в формате ASCIIZ – это последовательность символов, завершающаяся двоичным нулем, например: FILENAME DB ‘c: \autoexec. bat’, 0
Если строка не содержит путей, то подразумевается файл в текущей директории. Для расширенных функций адрес ASCIIZ-строки указывается в регистровой паре DS: DX – в регистре DS указывается сегмент строки, а в регистре DX – ее смещение. Функции создания и открытия файлов после своего выполнения устанавливают в регистре AX число, представляющее собой файловый номер. Файловый номер используется другими функциями (например, функцией чтения или записи файла) для идентификации открытого или созданного файла. Стандартные устройства ввода-вывода не нуждаются в операции открытия и могут использовать непосредственные файловые номера: 0 – ввод, 1 – вывод, 2 – вывод сообщений об ошибках, 3 – внешнее устройство, 4 – принтер. Таким образом, функцию записи файла, например, можно использовать для вывода информации на экран или на принтер.
После выполнения любой файловой операции флаг CF сбрасывается, если функция выполнилась успешно и устанавливается, если в ходе выполнения функции возникла какая-либо ошибка. При этом в регистр AX заносится код ошибки, зависящий от операции (коды ошибок приведены в табл. 14).
9. 1 Функции DOS для работы с файлами После выполнения каждой из рассмотренных функций DOS для работы с файлами рекомендуется проверять значение флага CF для определения успешности выполнения функции. При неуспешном выполнении функции следует завершить программу и выдать сообщение о соответствующей ошибке.
Функция 3CH Назначение: создание нового файла или перезапись старого файла. Имя создаваемого файла указывается в виде ASCIIZ-строки в регистровой паре DS: DX. В регистр CX заносится необходимый атрибут файла (табл. 12). В случае успешного выполнения функции создается новый элемент оглавления и файл с заданным атрибутом, а в регистре AX возвращается файловый номер созданного файла. Если файл уже существует, то его длина устанавливается равной 0 для перезаписи. Таблица 12 Коды атрибутов файлов
Пример использования функции 3CH: FileName DB ‘newfile. txt’, 0; имя файла Handle DW? . . . MOV AH, 3CH MOV CX, 0 ; создание обычного файла MOV DX, OFFSET FileName ; ASCIIZ-строка INT 21H JC Error MOV Handle, AX ; сохранение файлового номера . . . Error: . . . ; произошла ошибка
При задании атрибутов файла можно комбинировать значения из табл. 12 операцией «ИЛИ». При этом файл может иметь несколько атрибутов. Например, если в регистр CX занести значение 03H, то файл будет иметь атрибуты «только для чтения» и «скрытый». При перезаписи существующего файла его атрибуты не изменяются. Файл с атрибутом «нормальный» имеет атрибут «архивный», поэтому при любом значении регистра CX файл будет иметь атрибут «архивный». Хотя регистр CX может иметь значение 10H, создать директорию при помощи функции 3CH не удастся. Директорию можно создать специально предназначенной для этого функцией 39H (см. далее). При попытке перезаписать существующий файл с атрибутом «только чтение» функция установит флаг CF, свидетельствующий о возникновении ошибки, и занесет в регистр AX код ошибки 05H (доступ запрещен).
Функция 3DH Назначение: открытие существующего файла. Эта функция должна вызываться перед тем, как будет вызвана функция чтения файла. Функция 3DH проверяет правильность имени файла и его наличие на диске. При вызове функции регистровая пара DS: DX должна содержать адрес ASCIIZ-строки, а регистр AL код доступа: 0 – открыть файл только для чтения; 1 – открыть файл только для записи; 2 – открыть файл для чтения и записи. Код доступа имеет значение при использовании DOS в сетевом окружении или если установлена программа SHARE. EXE. При попытке открыть файл, доступный только для чтения, с кодом доступа 1 или 2 функция установит флаг CF, свидетельствующий о возникновении ошибки, и занесет в регистр AX код ошибки 05H (доступ запрещен). Следует отметить, что при открытии файла для перезаписи используется функция создания файла 3CH. Если файл нужно открыть для чтения или для записи, то нужно использовать функцию 3DH. Если файл с указанным именем не существует, то функция 3DH вернет код ошибки 02H (файл не найден) или 03H (путь не найден) в регистре AX. Пример использования функции 3DH: FileName DB ‘newfile. txt’, 0; имя файла Handle DW? . . . MOV AH, 3DH MOV AL, 0 ; открытие файла для чтения MOV DX, OFFSET FileName ; ASCIIZ-строка INT 21H JC Error MOV Handle, AX ; сохранение файлового номера . . . Error: . . . ; произошла ошибка
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|