Работа с файлами в MS DOS (длинные имена)
Перечисленные выше функции работают в различных версиях «чистой» системы MS DOS, вплоть до версии 6.22 включительно. Операционные системы Windows 95/98/Mil также поддерживают свою версию MS DOS, которая имеет номер 7.0. Операционная система Windows 95/98/Mil организует для программ MS DOS специальную среду для работы, называемую сеансом DOS. Система MS DOS 7.0, будучи созданной для работы в среде Windows 95/98/Mil, имеет в своем составе средства для работы с файловой системой Windows. Эта файловая система, как известно, отличается тем, что полное имя файла может достигать длины 255 символов. MS DOS 7.0 также умеет работать с длинными именами файлов. В данном разделе мы рассмотрим предназначенные для работы с файловой системой Windows средства среды MS DOS, работающей под управлением
Windows.
Определить факт того, в какой системе работает программа, можно по результатам работы функций 30h — получить версию DOS (прерывания 21п) и 4аЗЗп (прерывания 2fh).
Вход: АН = 30h; AL = определяет значение, возвращаемое в ВН: 00h— OEM-номер (как для DOS 2.0-4.0x);01h — номер версии.
Выход: AL = главный номер версии; АН - младший номер версии; BL:CX = 24-битный серийный номер пользователя (необязательно).
:prg07_19.a$m - программа демонстрации определения факта того. ;в какой системе работает программа.
.code
;.....определим номер версии ОС MS DOS
mov al .00
movah.30h ;номер функции DOS
int21h ;А1-главный номер версии. АН-младший номер версии
]с exit ;переход в случае ошибки
В регистрах AL и АН возвращаются главный и младший номера версии MS DOS. При функционировании под Windows эти номера равны 07h и Oah соответственно. Задание значения AL = 01 дает такой же эффект.
:prg07_20.asm - программа демонстрации определения факта работы в среде MS DOS 7.0.
.code
:-----определить факт работы в среде MS DOS 7.0
movax.4a33h ;номер функции DOS int 2fh
cmp ax, 0
jneexit ;переход, если работа не в среде MS DOS 7.0
Последняя функция возвращает 0 для MS DOS версии 7.0 и выше. Установить факт того, что система поддерживает длинные имена файлов, можно вызовом функции 71a0h прерывания 21п — получить информацию о томе. Если она возвращает ошибку (CF = 1), то текущая файловая система не поддерживает длинных имен файлов. Для вызова этой функции необходимо указать корневой каталог тома, о котором необходимо получить информацию. Вход: АХ = 71A0h; DS:SI — ASCIZ-имя корневого каталога тома, о котором необходимо получить информацию (например, "С:\"); ES:DI — буфер для имени файловой системы; СХ ¦= размер буфера, адрес которого задан в ES: DI (32 байта).
|
Новая функция int 21h |
Старая функция int 21h |
Назначение |
Функция API Win32 |
|
5704h |
Получить дату и время последнего доступа |
GetFileTime |
|
|
5705h |
Установить дату и время |
SetFileTime |
|
|
последнего доступа |
|||
|
5706h |
Получить дату и время создания |
GetFileTime |
|
|
5707h |
Установить дату и время создания |
SetFileTime |
|
|
7139h |
39h |
Создать каталог |
CreateDirectory |
|
713Ah |
3ah |
Удалить каталог |
RemoveDirectory |
|
713Bh |
3bh |
Изменить текущий каталог |
SetCurrentDi rectory |
|
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 |
Получить информацию о томе |
GetVolumelnfonnati on |
|
|
71Alh |
Завершить поиск |
FindClose |
|
|
71A6h |
Получить информацию о файле |
GetFi1 elnformationByHandle |
|
|
по описателю |
|||
|
71A7h |
Преобразовать время файла |
Fi1eTi meToDOSDateTime |
|
|
в DOS-время |
|||
|
71A7h |
Преобразовать DOS-время во время файла |
00SDateTi meToFi1eTi me |
|
|
71A8h |
Создать псевдоним |
Отсутствует |
|
|
71A9h |
Создать или открыть файл |
Отсутствует |
|
|
на сервере |
|||
|
71AAh |
Провести подмену |
Отсутствует |
|
|
71AAh |
Отменить подмену |
Отсутствует |
|
|
71AAh |
Получить информацию |
Отсутствует |
|
|
о подмене |