Создание и открытие файлов

Для создания новых или открытия уже существующих файлов используется функция СreateFile:

HANDLE CreateFile(

LPCTSTR lpFileName, // имя файла

DWORD dwDesiredAccess, // способ доступа

DWORD dwShareMode, // режимы совместного использова

LPSECUTITY_ATTRIBUTES IpSecurutyAttributes, // атрибуты защиты

DWORD dwGreationDisposition, // создание или открытие файла

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

HANDLE hTemplateFile // файл атрибутов

);

lpFileName задается указатель на символьную строку, которая содержит полное имя создаваемого или открываемого файла. Если полное имя файла не указано, то файл с заданным именем создается или ищется в текущем каталоге.

dwDesiredAccess:

0 — приложение может только определять атрибуты устройства;

GENERIC_READ — допускается только чтение данных из файла;

GENERIC_WRITE — допускается только запись данных в файл.

dwShareMode:

FILE_SHARE_READ — файл может использоваться только для совместного чтения несколькими программами;

FILE _SHARE_WRITE — файл может использоваться только для совместной записи несколькими программами;

FILE _SHARE_DELETE — файл может использоваться несколькими программами при условии, что каждая из них имеет разрешение на удаление этого файла.

lpSecurutyAttributes должен задавать атрибуты защиты файла. Пока этот параметр будем устанавливать в null. Это означает, что атрибуты файла устанавливаются по умолчанию, т. е. дескриптор файла не является наследуемым и файл открыт для доступа всем пользователям.

dwСreationDisposition:

СREATE_NEW — создать новый файл, если файл с заданным именем уже существует, то функция заканчивается неудачей;

СREATE _ALWAYS — создать новый файл, если файл с заданным именем уже существует, то он уничтожается и создается новый файл;

OPEN_EXISTING — открыть существующий файл, если файл с заданным именем не существует, то функция заканчивается неудачей;

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

TRUNCATE_EXISTING — открыть файл и уничтожить его содержимое, если файл с заданным именем не существует, то функция заканчивается неудачей.

Отметим, что в последнем случае вызывающий процесс должен иметь права записи в файл, т. е. в параметре dwDesiredAccess должен быть установленGENERIC_WRITE.

dwFiagsAndAttributes:

FILE _ATTRIBUTE_ARCHIVE — архивный файл, который содержит служебную информацию;

FILE _ATTRIBUTE_ENCRYPTED — зашифрованный файл;

FILE _ATTRIBUTE_HIDDEN — скрытый файл;

FILE _ATTRIBUTE_NORMAL — обычный файл, который не имеет, других ат­рибутов;

FILE _ATTRIBUTE_NOT_CONTENT_INDEXED — содержимое файла не индексировано;

FILE _ATTRIBUTE_OFFLINE– файл находится во вспомогательной памяти;

FILE _ATTRIBUTE_READONLY –файл можно только читать;

FILE _ATTRIBUTE_SYSTEM– файл используется операционной системой;

FILE _ATTRIBUTE_TEMPORARY– файл используется для временного хранения данных.

Замечания: атрибут FILE _ATTRIBUTE_NORMAL должен использоваться только один, зашифрованные файлы не могут иметь атрибут FILE _ATTRIBUTE_SYSTEM.

dwFlagsAndAttributes:

FILE_ FLAG_ WRITE_THROUGH – запись данных непосредственно на диск, не используя кэширования;

FILE_ FLAG_OVERLAPPED – обеспечивает асинхронное выполнение операций чтения и записи;

FILE_ FLAG_NO_BUFFERING – не использовать буферизацию при доступе к файлу;

FILE_ FLAG_RANDOM_ACCESS – программа предполагает выбирать записи из файла случайным образом;

FILE _FLAG_SEQUENTІAL_SCAN – программа будет сканировать файл i последовательно;

FILE_FLAG_DELETE_ON_CLOSE – файл будет удален после того, как все дескрипторы этого файла будут закрыты;

FILE_FLAG_BACKUP_SEMANTICS – резервный файл;

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