Справочник программиста на персональном компьютере фирмы IBM. Дисковые накопители
Страница 18. Создание/удаление файла. Часть 2


Метод дескриптора файла:

   Функция 3CH прерывания  21H  создает  и  открывает  новый файл
методом  дескриптора  файла.  DS:DX должны указывать  на  строку,
дающую путь к файлу и  имя  файла  в  стандартном формате MS DOS,
включая  имя накопителя, если файл находится не на накопителе  по
умолчанию. Строка должна завершаться байтом ASCII 0. Байт атрибу-
тов  файла  [5.2.6] поместите в CX (0 - для  нормального  файла).
Затем выполните функцию.  При  успешном  выполнении флаг переноса

будет равен нулю, а в AX будет возвращен номер нового файла.  При
возникновении ошибки  флаг  переноса  устанавливается в 1, а в AX
содержится код ошибки, который может быть равен 3, если не найден
путь, 4 - если уже открыты все буфера для файлов и 5 - если ката-
лог  полон или файл уже существует со статусом только для чтения.
Отметим, что если в каталоге уже существует  файл с таким именем,
то  существующий  файл обрезается до нулевой длины, и  тем  самым
разрушается.  Для избежания  ошибок надо предварительно использо-
вать функцию 4EH прерывания 21H для проверки.

;---в сегменте данных
PATH     DB     'B:LEVEL1\LEVEL2\FILENAME.EXT',0

;---проверка наличия файла в каталоге
   MOV  AH,4EH         ;функция поиска в каталоге
   LEA  DX,PATH        ;DS:DX указывают на путь
   INT  21H            ;проверка наличия файла
   JNC  WARN_USER      ;если есть, то сообщаем

;---создание файла
   MOV  AH,3CH         ;функция создания файла
   MOV  CX,0           ;нормальные атрибуты
   INT  21H            ;создаем файл
   JC   OPEN_ERROR     ;уход на обработку ошибки
   MOV  HANDLE,AX      ;запоминаем номер файла

   В  MS DOS 3.0 добавлена новая функция для создания файла мето-
дом дескриптора файла.  Это функция номер 5BH прерывания 21H. Она
работает  в точности так же, как и описанная функция 3CH, за иск-
лючением того, что она  возвращает  расширенные  коды ошибок, что
позволяет лучше обрабатывать ошибочные ситуации.  Они объяснены в
[7.2.5].
   Для уничтожения файла  методом  дескриптора  файла используйте
функцию  41H прерывания 21H.  И опять DS:DX должны  указывать  на
строку, дающую путь и имя файла.  Джокеры в имени файла не допус-
каются.  Затем вызовите функцию.  Если при возврате флаг переноса
установлен, то функция не  выполнена;  в этом случае AL будет со-
держать  2,  если файл не найден и 5 - если произошла  ошиька  на
диске.  Отметим, что с помощью  этой функции Вы не можете удалить
файл  со  статусом  только для чтения;  измените  атрибуты  файла
[5.2.6] перед его удалением. Вот пример:

;---в сегменте данных
PATH    DB    'B:LEVEL1\LEVEL2\FILENAME.EXT',0

;---уничтожаем файл
   MOV  AH,41H         ;номер функции уничтожения
   LEA  DX,PATH        ;DS:DX указывают на путь
   INT  21H            ;уничтожаем файл
   JC   DELETE_ERROR   ;на обработку ошибки

   MS DOS версии 3.0  имеет  специальную  функцию (5AH прерывания
21H)  для создания временного "безымянного" файла.   Операционная
система сама генерирует  имя  для  файла  и проверяет, что такого
файла еще нет в каталоге. При этом исключается всякая возможность
что при создании  временного  файла  будет  разрушен существующий
файл  с совпадающим именем.  При входе DS:DX должны указывать  на
строку пути к каталогу,  в  котором  должен быть создан временный
файл.  Строка должна завершаться обратной косой чертой. Поместите

атрибуты файла в CX (обычно 0).   При возврате AX будет содержать
номер  файла,  если  только флаг переноса не  установлен, в  этом
случае AX содержит информацию  об  ошибке. Произвольное имя файла
добавляется  к концу строки пути.  Эта функция  может  возвращать
расширенные коды ошибок, которые  существуют только в MS DOS 3.0;
они объясняются в [7.2.5]. Файл, созданный этой функцией не унич-
тожается автоматически  -  программа  должна использовать функцию
41H  (см.   выше).  В данном примере программа создает  временный
файл, а затем уничтожает его:

;---в сегменте данных
PATH   DB    'B:LEVEL1\LEVEL2\',12 DUP(0)

;---создаем временный файл
   MOV  AH,5AH         ;номер функции
   LEA  DX,PATH        ;DS:DX указывают на путь
   INT  21H            ;создаем временный файл
   JC   CREATION_ERROR ;уход на обработку ошибки
    .
    .
   MOV  AH,41H         ;номер функции
   LEA  DX,PATH        ;DS:DX указывают на путь
   INT  21H            ;уничтожаем временный файл
   JC   DELETION_ERROR ;уход на обработку ошибки

 
« Предыдущая статья   Следующая статья »