Учебное пособие: Файловая система
Неудобным в функциях Windows API для работы с файлами является то, что для флагов этих функций предусмотрены только числовые значения, а не символические. Так, например, для функции _lcreat параметр fnAttribute равный 0, соответствует созданию обычного файла, а 2 — скрытого. Или для функции _llseek параметр nOrigin равный 1 указывает на задание нового положения относительно текущего, а не относительно начала файла. Все эти константы так и надо указывать в виде числа, предварительно проверив их значение по руководству.
Используемые в Windows хендлы файлов являются хендлами файлов MS–DOS. Это позволяет легко применять обычные средства для работы с файлами. С другой стороны это приводит к типичной ошибке: в Windows принято, что значение 0 для хендла является недопустимым; то есть обычная проверка при получение хендла какого–либо объекта выглядит так:
HANDLE hObject;
hObject = Get...(...); // получаемхендлобъекта
if (hObject) {// проверяем его...
// все в порядке
} else {
// ошибка!}
Однако при работе с файлами такой способ ошибочен — хендл файла, равный 0, в MS–DOS соответствует стандартному устройству для вывода (stdout), а не недопустимому. Для обозначения ошибки применяется значение хендла файла не 0, а -1. Для удобства в windows.h определен специальный символ HFILE_ERROR, равный -1. Предыдущий фрагмент при работе с файлами должен выглядеть так:
HFILEhFile;
hFile = _lcreat(“c:\\myfile.dat”, 0);
if (hFile != HFILE_ERROR) {
// всевпорядке
...
_lclose(hFile);
} else {
// ошибка!}
Помимо уже рассмотренных в Windows предусмотрена специальная функция, предназначенная для открытия, поиска, удаления файлов и выполнения некоторых других операций:
HFILE OpenFile(lpszFileName, lpOpenBuff, fuMode);
Параметр lpOpenBuf является указателем на структуру OFSTRUCT. В этой структуре сохраняется информация об открытом файле, что позволяет использовать ее для повторного открытия (или удаления) того–же файла позже. Параметр fuMode обычно указывает режим доступа к открытому файлу (флаги OF_READ, OF_WRITE, OF_READWRITE), выполняемую операцию — открыть или создать файл (OF_CREATE), ограничение доступа к файлу других приложений (OF_SHARE_...).
Помимо открытия файла данная функция способна выполнять некоторые специфические операции (задаваемые тем–же параметром fuMode):
удалениефайлаOF_DELETE,
поискфайлаOF_SEARCH,
проверка существования файла OF_EXIST,
повторное открытие файла по информации, сохраненной в структуре OFSTRUCTOF_REOPEN,
инициализацию структуры OFSTRUCTOF_PARSE,
сравнение даты и времени создания файла с данными в структуре OFSTRUCTOF_VERIFY,
а также сообщать о невозможности открыть файл (при этом функция OF_PROMPT и не позволяет ни выбрать другой файл, ни указать новое имя файла) OF_CANCEL
Еще несколько функций Windows носят вспомогательный характер. Так, например, функции GetWindowsDirectory и GetSystemDirectory возвращают информацию о каталоге, содержащем win.com — каталоге Windows и системном каталоге (обычно windows\system).