Реализация функциональности
Для запуска функции асинхронного чтения из файла ReadFile, необходимо предварительно подготовить несколько переменных, а именно: hFile, inBuffer, nBytesToRead, hEvent1, gOverLapped. А теперь о каждой из них по порядку.
hFile= CreateFile(fileName, // Открываемый файл
GENERIC_READ, // Открываем для чтения
FILE_SHARE_READ, // Для совместного чтения
NULL, // Защита по умолчанию
OPEN_EXISTING, // Только существующий файл
FILE_FLAG_OVERLAPPED, // в асинхронном режиме
NULL); // Атрибутов шаблона нет
Прототип этой функции выглядит следующим образом:
HANDLE CreateFile(
LPCTSTR lpFileName, // имя файла
DWORD dwDesiredAccess, // режим доступа
DWORD dwShareMode, // совместный доступ
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // SD (дескр. защиты)
DWORD dwCreationDisposition, // как действовать
DWORD dwFlagsAndAttributes, // атрибуты файла
HANDLE hTemplateFile // дескр.шаблона файла
);
Параметры
lpFileName
[in] Указатель на символьную строку с нулем в конце, устанавливающую имя объекта, который создается или открываться.
dwDesiredAccess
[in] Тип доступа к объекту (чтение, запись или то и другое).
lpSecurityAttributes
[in] Указатель на структуру SECURITY_ATTRIBUTES, которая устанавливает может ли возвращенный дескриптор быть унаследован дочерними процессами. Если lpSecurityAttributes имеет значение ПУСТО (NULL), дескриптор не может быть унаследован.
dwShareMode
[in] Режим совместного доступа (чтение, запись, оба или никакого действия). Может принимать следующие значения:
Значение |
Предназначение |
FILE_SHARE_DELETE |
Разрешает последующие операции открытия объекта, которые требуют доступа к его удалению. В противном случае, другие процессы не смогут открыть объект, если они потребуют доступа к удалению. |
FILE_SHARE_READ |
Разрешает последующие операции открытия объекта, которые требуют доступа для чтения. В противном случае, другие процессы не смогут открыть объект, если они потребуют доступа для чтения. |
FILE_SHARE_WRITE |
Разрешает последующие операции открытия объекта, которые требуют доступа для записи. В противном случае, другие процессы не смогут открыть объект, если они потребуют доступа для записи. |
dwCreationDisposition
[in] Выполняемые действия с файлами, которые существуют и выполняемые действия с файлами, которые не существуют. Подробную информацию об этом параметре см. в разделе Замечаний. Этот параметр должен быть одним из нижеперечисленных значений:
Значение |
Предназначение |
CREATE_NEW |
Создает новый файл. Функция завершается ошибкой, если заданный файл уже существует. |
CREATE_ALWAYS |
Создает новый файл. Если файл существует, функция переписывает файл, сбрасывает существующие атрибуты и объединяет, заданные параметром dwFlagsAndAttributes атрибуты файла и флажки, с FILE_ATTRIBUTE_ARCHIVE, но не устанавливает дескриптор безопасности заданный структурой SECURITY_ATTRIBUTES. |
OPEN_EXISTING |
Открывает файл. Функция завершается ошибкой, если файл не существует. |
OPEN_ALWAYS |
Открывает файл, если таковой существует. Если файл не существует, функция создает файл, как будто бы dwCreationDisposition имел значение CREATE_NEW. |
TRUNCATE_EXISTING |
Открывает файл и обрезает его так, чтобы его размер равнялся нулю байтов. Вызывающий процесс должен открыть файл с правом доступа GENERIC_WRITE . Функция завершается ошибкой, если файл не существует. |
dwFlagsAndAttributes
[in] Атрибуты и флажки файла. Подробный список возможных значений см.[2]
hTemplateFile
[in] Дескриптор файла шаблона с правом доступа GENERIC_READ. Файл шаблона предоставляет атрибуты файла и дополнительные атрибуты для создающегося файла. Этот параметр должен быть ПУСТО (NULL).