Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторный практикум «Основы разработки приложений Windows» книга 2.DOC
Скачиваний:
91
Добавлен:
10.05.2014
Размер:
827.9 Кб
Скачать

6. Обслуживание файлов в 32-разрядных приложениях Windows

Те или иные операции с файлами используются почти в любом приложении Windows. Действительно, трудно представить себе программу, которая вводит информацию только с клавиатуры и вы­водит ее только на экран. В этом случае объемы обрабатываемых данных будут невелики, а результаты работы программы недолговечны. Чаще и исходные для программы данные, и данные, полученные в результате ее работы, хранятся на дисках в виде файлов; многие программы по ходу своей работы создают еще и временные файлы для хранения промежуточной информации. При завершении программы эти временные файлы уничтожаются.

Для 32-разрядных приложений системой Windowsпредоставляются как традиционные средства работы с файловой системой (создание и удаление файлов и каталогов, чтение и запись, поиск, изменение характеристик и др.), так и специфические средства, не поддерживаемые в 16-разрядных приложениях Windows или вMS-DOS. К последним прежде всего следует отнести проецирование файлов в память, асинхронные операции с файлами и расширенное толкование понятия физической памяти как суммы оперативной памяти и страничных файлов (файлов подкачки).

Базовые операции с файлами Открытие и создание файла

Перед тем как начать работать с файлом, программа должна либо его создать заново, либо открыть, если он был создан ранее. И та и другая операция выполняются в 32-разрядных приложениях Windows с помощью одной универсальной функции – CreateFile(). При успешном выполнении эта функция возвращает 32-разрядный дескриптор файла типаHANDLE, через который потом и выполняются все операции с данным файлом. Если файл открыть не удалось, функцияCreateFile()возвращает0xFFFFFFFF. ФункцияCreateFile()имеет следующий прототип:

HANDLE CreateFile(

LPCTSTR lpFileName,//Адрес спецификации файла

DWORD dwDesiredAccess,//Режим доступа

DWORD dwShareMode,//Режим разделения

LPSECURITY_ATTRIBUTES lpSecurityAttributes,//Адрес

//структуры с атрибутами защиты

DWORD dwCreationDistribution,//Режим открытия

DWORD dwFlagsAndAttributes,//Атрибуты файла

HANDLE hTemplateFile //Дескриптор файла-шаблона

);

Параметр lpFileNameописывает спецификацию файла по обычным правилам, например"Myfile.001", если файл находится в текущем каталоге, или"C:\\Dir\\1.1", если файл находится в конкретном каталоге конкретного диска. Обратите внимание на обозначение пути к файлу. Поскольку в языке С++ символ “\” является управляющим, то для того чтобы ввести этот символ в символьную строку, например, в качестве разделителя каталогов в составном пути, следует указывать два таких символа. Допустимо также использование для разделения элементов пути одного знака деления:"C:/Dir/1.1"

Параметр dwDesiredAccessпри работе с файлами чаще всего указывается в видеGENERIC_READ | GENERIC_WRITE, что обеспечивает доступ к файлу как для чтения, так и для записи.

Параметр dwShareModeимеет значение в тех случаях, когда к файлу могут одновременно обращаться несколько приложений; если файл будет использоваться в монопольном режиме, на месте этого параметра указывается 0.

Параметр lpSecurityAttributesуказывает на структурную переменную типаSECURITY_ATTRIBUTES, которая позволяет задать атрибуты защиты для данного объекта. Этот параметр имеет смысл, главным образом, в сетевых приложениях; создавая обычную прикладную программу, которая будет выполняться на автономной или локальной машине, на месте этого параметра можно указатьNULL.

Параметр dwCreationDistributionможет принимать следующие значения:

CREATE_NEW– создается новый файл; если файл уже существует, функцияCreateFile()возвращает ошибку;

CREATE_ALWAYS– создается новый файл; если файл с указанным именем уже существует, он затирается вновь создаваемым;

OPEN_EXISTING– открывается существующий файл; если такого файла нет, функцияCreateFile()возвращает ошибку;

OPEN_ALWAYS– открывается существующий файл; если такого файла нет, функцияCreateFile()создает новый файл с указанным именем.

Параметр dwFlagsAndAttributesпозволяет установить атрибуты и некоторые другие специальные характеристики файла. В большинстве случаев эти характеристики значения не имеют, и в качестве этого параметра можно указать 0.

Параметр hTemplateFileможет содержать дескриптор открытого файла-шаблона, атрибуты которого применяются и для вновь создаваемого файла. Обычно в качестве значения этого параметра используетсяNULL.

Таким образом, типичным для прикладной программы будут следующие формы вызова функции CreateFile():

/*При создании нового файла*/

HANDLE hFile=CreateFile("001.dat",

GENERIC_READ|GENERIC_WRITE,

0, NULL, CREATE_ALWAYS, 0, NULL);

/*При открытии существующего файла*/

HANDLE hFile=CreateFile("001.dat",

GENERIC_READ | GENERIC_WRITE,

0, NULL, OPEN_EXISTING, 0, NULL);

После завершения работы с файлом или перед завершением программы все открытые в ней файлы следует закрыть. Для этого используется функция CloseHandle()c указанием в качестве ее единственного параметра дескриптора закрываемого файла:

CloseHandle(hFile);

Впрочем, в процессе завершения приложения Windows закрывает все созданные им объекты, в частности файлы, так что во многих случаях заботу о закрытии файлов можно возложить на Windows.