Иллюстрированный самоучитель по задачам и примерам Assembler

Работа с файлами в MS DOS (длинные имена)

Создание, открытие, закрытие и удаление файла

Функции MS DOS, поддерживающие длинные имена файлов, имеют номера из четырех цифр – первые две равны 71h, последние две соответствуют номеру аналогичной старой функции MS DOS. В программах старые и новые функции применяются вместе по принципу: там, где функция должна работать непосредственно с длинными именами файлов и каталогов, применяются новые функции; там, где функция работает с дескриптором файла, используются старые функции. Новые функции также используются для реализации новых возможностей по работе с файловой системой.

Открытие или создание файла

Для создания или открытия файла с длинным именем используется функция 716Ch (создать или открыть файл). Эта функция аналогична функции 6ch, которая появилась в последних версиях MS DOS (DOS 4.0+). Мы уже обсуждали ее в разделе, посвященном функциям работы с файлами с короткими именами.

Вход: АХ = 716Ch; BX = режимы доступа и флаги:

  • режим доступа: 0000h – файл только для чтения; 0001h – файл только для записи; 0002h – файл для чтения и записи; 0003h – резерв; 0004h – открыть файл для чтения без изменения даты последнего доступа к файлу;
  • режим разделения: 0000h – режим эмуляции – файл можно открывать любой программе любое количество раз; 00Wh – файл открыт в монопольном режиме доступа; 0020h – файл открыт в монопольном режиме доступа по записи; 0030h – файл открыт в монопольном режиме доступа по чтению; 0040h – открыть файл, разрешая другим процессам доступ по чтению-записи, но с запретом режима эмуляции;
  • флаги: 0080h – дочерний процесс не наследует дескриптор файла, его при необходимости нужно передавать явно; 0100h – не использовать буферизацию или кэширование средствами ОС, операции чтения-записи выполняются напрямую с диском в соответствии с текущим положением файлового указателя; 0200h – файл нельзя сжимать; 0400h – содержимое регистра 01 следует использовать как порядковый номер в псевдониме файла; 2000h – не вызвать обработчик критической ошибки (int 24h), MS DOS вернет программе код ошибки; 4000h – после каждой операции записи MS DOS будет отправлять данные на диск без их кэширования;

СХ – атрибуты создаваемого (и только) файла: 0000h – файл доступен по записи и чтению; 0001h – файл доступен по чтению; 0002h – скрытый файл; 0004п – системный файл; 0008h – метка тома; 0020h – архивный файл;

DX ~ действия, если файл существует или не существует, значения битов: 0010h – вернуть ошибку, если файл существует, иначе создать файл; 0001h – открыть файл, если он существует, иначе вернуть ошибку; 0002h – открыть файл без сохранения существующего, иначе вернуть ошибку (если файл не существует);

DS:SI – ASCIZ-имя файла;

DI – порядковый номер, который добавляется к концу имени в псевдониме файла (для этого должен быть задан флаг 0400h в регистре ВХ)

Номер будет десятичным письмом, то есть если DI=0010h, то конец псевдонима – --16.

Выход: CF=0 – успешное выполнение функции: АХ = дескриптор файла, СХ = состояние: 1 – файл открыт; 2 – файл создан и открыт; 2 – файл открыт без сохранения содержимого существующего файла;

CF=1: AX = код ошибки.

После того как файл открыт или создан функцией 716ch, с ним можно работать, используя старые функции чтения-записи и позиционирования. Следующий фрагмент программы показывает вариант применения функции 716Ch.

Закрытие файла производится функцией 3Eh, которая использовалась для файловых функций MS DOS с короткими именами.

Удаление файла

Удаление файлов, имеющих длинные имена, производится функцией 7141h прерывания 21п. Имя файла может быть задано с использованием символов шаблона * и ?, при этом в результате работы функции будут удалены все файлы, чье имя удовлетворяет заданному шаблону.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.