В этом разделе будут приведены минимальные
сведения, необходимые для выполнения простых операций с файлами. В
отличие от MS DOS среда Win32 способна поддерживать несколько файловых
систем. Главные требования к этим системам — иерархичность и соблюдение
определенных правил присвоения имен каталогам и файлам.
Перечислим функции API Win32, имеющие отношение к работе с файловой системой. Полное их описание можно получить в MSDN.
Функция | Назначение |
AreFileApisANSI | Определение набора символов файла — ANSI или OEM |
CancelIo | Отменить все ждущие обработки операции (I/O) ввода и вывода |
CloseHandle | Закрыть открытый дескриптор файла |
CopyFile, CopyFileEx CopyProgressRoutine | Копирование cуществующего файла в новый |
CreateDi rectory, CreateDirectoryEx | Определенная приложением функция обратного вызова, используемая с функциями CopyFileEx и MoveFileWithProgress. Она вызывается, когда завершается часть операции копирования или пересылки |
CreateFile | Создать каталог |
DefineDosDevice | Создать файл или объект специального типа |
DeleteFile | Определить, переопределить или удалить имена устройства MS DOS |
FindCiose | Удалить файл |
Fi ndCloseChangeNoti fi cati on | Закрыть указанный поисковый дескриптор (см. функции FindFirstFile и FindNextFile) |
FindFi rstChangeNoti fication | Закрыть объект-уведомление об изменении файла |
FindFirstFile, FindFirstFileEx, FindNextFile | Создать объект-уведомление об изменении файла |
F1ndNextChangeNoti fi cati on | Поиск файлов |
FlushFileBuffers | Сброс объекта-уведомления в занятое состояние |
GetBinaryType | Очистка буфера для указанного файла и запись всех буферизированных данных в файл |
GetCurrentDirectory | Определить, является ли файл исполняемым, и если это так, то для какой подсистемы — Win32, MS DOS, OS/2, POSIX и т. д. |
GetDiskFreeSpace, GetDiskFreeSpaceEx | Получить текущий каталог |
GetDriveType | Информация относительно указанного диска, включая количество свободного пространства на нем |
GetFileAttributes, GetFileAttributesEx | Определить тип диска — съемный, фиксированный, CD-ROM, электронный или сетевой |
GetFi1elnformati onByHandle | Получить атрибуты файла или каталога |
GetFi1eSi ze, GetFi1eSi zeEx | Найти информацию относительно указанного файла |
GetFileType | Получить размер указанного файла |
GetFullPathName | Получить тип указанного файла |
GetLogical Drives, GetLogi calDri veStri ngs | Получить полный путь и имя для указанного файла |
GetLongPathName | Определить доступные в настоящее время дисководы |
GetShortPathName | Преобразовать указанный путь к его длинной форме |
GetTempFileName | Получить псевдоним файла |
GetTempPath | Создать имя для временного файла |
LockFile, LockFileEx | Получить путь каталога для временных файлов Блокировка файла |
Далее на примерах конкретных программ разберемся с тем, как использовать в программах на ассемблере наиболее интересные и часто применяемые функции из перечисленных выше для работы с файлами API Win32. В целях экономии места все примеры реализованы в виде консольных приложений. Основное внимание уделено не полноте описания параметров для вызова той или иной функции и результатов ее работы (эту информацию можно найти в справочниках по функциям API), а деталям практической реализации файловых операций в программах на языке ассемблера. Для изучения подробностей работы функций API Win32 необходимо использовать какой-либо отладчик для Windows, напри-MepTD32.EXE.
Обработка ошибок
Прежде чем рассматривать функции API Win32, относящиеся к файловому вводу-выводу, отметим, как можно выяснить причину их ошибочного завершения. Для этого Windows предоставляет функцию GetLastError.
DWORD GetLastError(void):
Для вызова функции GetLastError не нужно передавать никаких параметров. Эту функцию необходимо вызывать сразу после функции API Win32, успешность работы которой мы проверяем.
;.........
push offset info
push hFile
call GetFilelnformationByHandle
call GetLastError ;в регистре ЕАХ возвращается код ошибки
В регистре ЕАХ возвращается код ошибки. Расшифровать его можно с помощью файла Winerror.h, где вместе с кодами ошибок приведены короткие сообщения о причине их возникновения.