Учебное пособие: Файловая система

Неудобным в функциях 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).

К-во Просмотров: 526
Бесплатно скачать Учебное пособие: Файловая система