Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка ТВП ЛР A5.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
611.84 Кб
Скачать

Функция CloseHandle

Функция CloseHandle позволяет закрыть файл. Она имеет единственный параметр - идентификатор закрываемого файла. Заметим, что если мы указали функции CreateFile флаг FILE_FLAG_DELETE_ON_CLOSE, сразу после закрывания файл будет удален. Как мы уже говорили, такая методика очень удобна при работе со временными файлами.

Функции ReadFile и WriteFile

С помощью функций ReadFile и WriteFile приложение может выполнять, соответственно, чтение из файла и запись в файл. Приведем прототипы функций ReadFile и WriteFile:

BOOL ReadFile (

HANDLE hFile,

// идентификатор файла

LPVOID lpBuffer,

// адрес буфера для данных

DWORD nNumberOfBytesToRead,

// количество байт, которые

// необходимо прочесть в буфер

LPDWORD lpNumberOfBytesRead,

// адрес слова, в которое будет записано

// количество прочитанных байт

LPOVERLAPPED lpOverlapped);

// адрес структуры типа OVERLAPPED

BOOL WriteFile (

HANDLE hFile,

// идентификатор файла

LPVOID lpBuffer,

// адрес записываемого блока данных

DWORD nNumberOfBytesToWrite,

// количество байт, которые

// необходимо записать

LPDWORD lpNumberOfBytesWrite,

// адрес слова, в котором будет сохранено

// количество записанных байт

LPOVERLAPPED lpOverlapped);

// адрес структуры типа OVERLAPPED

Через параметр hFile этим функциям необходимо передать идентификатор файла, полученный от функции CreateFile.

Параметр lpBuffer должен содержать адрес буфера, в котором будут сохранены прочитанные данные (для функции ReadFile), или из которого будет выполняться запись данных (для функции WriteFile).

Параметр nNumberOfBytesToRead используется для функции ReadFile и задает количество байт данных, которые должны быть прочитаны в буфер lpBuffer. Аналогично, параметр nNumberOfBytesToWrite задает функции WriteFile размер блока данных, имеющего адрес lpBuffer, который должен быть записан в файл.

Так как в процессе чтения возможно возникновение ошибки или достижение конца файла, количество прочитанных или записанный байт может отличаться от значений, заданных, соответственно, параметрами nNumberOfBytesToRead и nNumberOfBytesToWrite. Функции ReadFile и WriteFile записывают количество действительно прочитанных или записанных байт в двойное слово с адресом, соответственно, lpNumberOfBytesRead и lpNumberOfBytesWrite.

Параметр lpOverlapped используется в функциях ReadFile и WriteFile для организации аснхронного режима чтения и записи. Если запись выполняется синхронно, в качестве этого параметра следует указать значение NULL.

Если функции ReadFile и WriteFile были выполнены успешно, они возвращают значение TRUE. При возникновении ошибки возвращается значение FALSE. В последнем случае вы можете получить код ошибки, вызвав функцию GetLastError.

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

7.2. Обмен через файлы, отображаемые на память

Перед рассмотрением данного способа ознакомимся, с механизмом, осуществляющим отображение файлов на память, и рассмотрим соответствующие функции.