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