Работа с файлами в MS DOS (длинные имена)
Рассмотренные выше функции MS DOS для работы с файлами и каталогами не поддерживают длинных имен. Для этого система Windows 95/98 предоставляет приложениям MS DOS аналогичные функции, но имеющие другие номера. Впрочем, при внимательном рассмотрении большинства из этих номеров, видно, какой из старых функций они соответствуют. Новые номера состоят из четырех цифр: первые две – 071h, последние две – номер старой функции. Для некоторых функций существуют особенности в их работе.
Так, для поиска файлов по-прежнему используются две функции (по новой нумерации – 714eh и 714fh) прерывания 21h. Новые функции теперь возвращают информацию о файлах через специальную структуру WIN32_F INDDATA, адрес которой возвращается в качестве результата их работы.
При работе с функциями, поддерживающими длинные имена файлов, используются еще две структуры: byhandle_file_information и filetime. Назначение структуры by_handle_file_iinformation и работу с ней мы рассмотрим при обсуждении функции MS DOS 71a6h. Структура filetime содержит 64-разрядное значение, которое определяет число 100-наносекундных интервалов, прошедших с 12:00 утра 1 января 1901 года.
FILETIME Struc DwLowDateTime dd? :младшие 32 бита значения времени DwHighDateTime dd? :старшие 32 бита значения времени FILETIME ends
Теперь приведем перечень функций прерывания 21h, работающих с файлами, которые имеют длинные имена. Для удобства дальнейшего рассмотрения в следующей таблице приведены соответствующие функции API WIN32 и "старые" функции прерывания 21h.
Новая функция int 21h | Старая функция int 21h | Назначение | Функция API Win32 |
---|---|---|---|
5704h | Получить дату и время последнего доступа | GetFileTime | |
5705h | Установить дату и время последнего доступа | SetFileTime | |
5706h | Получить дату и время создания | GetFileTime | |
5707h | Установить дату и время создания | SetFileTime | |
7139h | 39h | Создать каталог | CreateDirectory |
713Ah | 3ah | Удалить каталог | RemoveDirectory |
713Bh | 3bh | Изменить текущий каталог | SetCurrentDirectory |
7141h | 41h | Удалить файл | DeleteFile |
7143h | 43h | Получить или установить атрибуты файла | GetFileAttributes, SetFileAttributes |
7147h | 47h | Получить текущий каталог | GetCurrentDirectory |
714Eh | 4Eh | Найти первый файл | FindFirstFile |
714Fh | 4Fh | Найти следующий файл | FindNextFile |
7156h | 56h | Переименовать файл | MoveFile |
7160h | Получить полный путь | GetFullPathName | |
7160h | Получить полный путь с краткими именами | GetShortPathName | |
7160h | Получить полный путь с длинными именами | Отсутствует | |
716Ch | 3ch, 3dh, 5bh |
Создать или открыть файл | CreateFile, OpenFile |
71A0h | Получить информацию о томе | GetVolumelnfonnation | |
71Alh | Завершить поиск | FindClose | |
71A6h | Получить информацию о файле по описателю | GetFilelnformationByHandle | |
71A7h | Преобразовать время файла в DOS-время | FileTimeToDOSDateTime | |
71A7h | Преобразовать DOS-время во время файла | DOSDateTimeToFileTime | |
71A8h | Создать псевдоним | Отсутствует | |
71A9h | Создать или открыть файл на сервере | Отсутствует | |
71AAh | Провести подмену | Отсутствует | |
71AAh | Отменить подмену | Отсутствует | |
71AAh | Получить информацию о подмене | Отсутствует |
Рассмотрим наиболее интересные в контексте нашего изложения функции этой таблицы. Информацию по остальным функциям можно получить, в частности, из MSDN. Порядок рассмотрения будет от простых функций к сложным, так как это было в предыдущем разделе, посвященном функциям работы с файлами ДО DOS, имеющими короткие имена.