В этом разделе будут приведены минимальные сведения, необходимые для выполнения простых операций с файлами. В отличие от 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, где вместе с кодами ошибок приведены короткие сообщения о причине их возникновения.