Создание, открытие, закрытие и удаление файла. Атрибуты файла.
Функции 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п. Имя файла может быть задано с использованием символов шаблона * и ?, при этом в результате работы функции будут удалены все файлы, чье имя удовлетворяет заданному шаблону.
Получить дату и время создания файла
Вход: АХ = 5706h; ВХ – дескриптор файла.;
Выход: CF = 0 – успешное выполнение функции: СХ = биты установлены следующим образом: 0..4 – секунды, деленные на 2; 5..10 = минуты 0..59; 11..15 – часы;
DX – биты установлены следующим образом: 0..4 = день месяца в диапазоне 1..31; 5..8 = месяц в диапазоне 1..12; 9..15 = число лет начиная с 1980 года;
SI – двоичное значение количества 10-миллисекундных интервалов, добавляемых ко времени MS DOS в диапазоне 0..199;
CF = 1: АХ = код ошибки.
Данная функция реализована в полном объеме.