Шаг 64.
Функции расширенной версии DOS для работы с файлами. Дополнительные операции с файлами

    На этом шаге мы перечислим некоторые дополнительные функции, используемые при работе с файлами в расширенной версии DOS.

    Перечислим другие дисковые функции в расширенной версии DOS.

    1. Получение размера свободного дискового пространства (функция 36H). Данная функция выдает информацию о дисковой памяти. Для выполнения функции необходимо загрузить в регистр DL номер дисковода (0 - текущий дисковод, 1 - A, 2 - B и т.д.):

    MOV  AH,36H    ; Функция выдачи свободного пространства.
    MOV  DL,0      ; Текущий дисковод.
    INT  21H       ; Вызов DOS-прерывания.

    При указании неправильного номера дисковода операция возвращает в регистре AX FFFFH. Если номер дисковода правильный, то возвращаются:

    2. Удаление файла (функция 41H). В регистр DX необходимо загрузить ASCIIZ-строку, содержащую путь доступа и имя файла:

    MOV  AH,41H       ; Запрос на удаление.
    LEA  DX,PATHNAM   ; ASCIIZ-строка.
    INT  21H          ; Вызов DOS-прерывания.

    В случае ошибки в регистре AX возвращается код 02 (файл не найден) или 05 (нет доступа).

    3. Управление файловым указателем (функция 42H). Система DOS имеет файловый указатель, который при открытии файла устанавливается в 0 и увеличивается на 1 при последовательных операциях записи или чтения. Для доступа к любым записям внутри файла можно менять файловый указатель с помощью этой функции, получая прямой доступ к требуемым записям файла.

    Для установки файлового указателя необходимо поместить в регистр BX файловый номер и в регистровую пару CX:DX - требуемое смещение в байтах. Для смещений до 65535 в регистре CX устанавливается 0, а в DX - смещение. В регистре AL должен быть установлен один из кодов, который определяет точку отсчета смещения:

    В следующем примере устанавливается файловый указатель на смещение 1024 байта от начала файла:

    MOV  AH,42H       ; Установка указателя
    MOV  AL,00        ; от начала файла.
    MOV  BX,HANDLE1   ; Установка файлового номера.
    MOV  CX,00        ; Смещение на
    MOV  DX,1024      ; 1024 байта.
    INT  21H          ; Вызов DOS-прерывания.
    JC   error

    Правильно выполненная операция сбрасывает флаг CF и возвращает новое положение указателя в регистровой паре DX:AX. Неправильная операция устанавливает флаг CF в 1 и возвращает в регистре AX код 01 (ошибка кода отсчета) или 06 (ошибка файлового номера).

    4. Переименование файла (функция 56H). В регистр AH помещается значение функции. При этом в регистр DX должен быть загружен адрес ASCIIZ-строки, содержащей старые значения дисковода, пути доступа, имени и типа файла, а в регистр DI (в действительности ES:DI) - адрес ASCIIZ-строки, содержащей новые значения дисковода, пути доступа, имени и типа файла. Если указывается номер дисковода, то он должен быть одинаков в обоих строках. Путь доступа может быть различным, поэтому данная операция может не только переименовывать файл, но и переносить его в другое подоглавление:

    MOV  AH,56H       ; Запрос на переименование файла.
    LEA  DX,oldstring ; DS:DX
    LEA  DI,newstring ; ES:DI
    INT  21H          ; Вызов DOS-прерывания.

    В случае ошибки регистр AX возвращает коды 03 (путь доступа не найден), 05 (нет доступа) и 17 (разные дисководы).

    На следующем шаге мы рассмотрим пример, иллюстрирующий использование некоторых из перечисленных функций.




Предыдущий шаг Содержание Следующий шаг