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

2.2. Чтение из файла

Для чтения данных из файла используется функция ReadFile.

BOOL ReadFile(

HANDLE hFile, // дескриптор файла для чтения

LPVOID lpBuffer, // указатель на буфер для хранения данных

DWORD nNumberOfBytesToRead, // количество байт для чтения

LPDWORD lpNumberOfBytesRead, // указатель на количество фактически //считанных байтов

LPOVERLAPPED lpOverlapped // указатель на структуру данных

);

hFile -идентифицирует файл для чтения, должен быть открыт с доступом GENERIC_READ

lpBuffer - указатель на буфер для приема данных

nNumberOfBytesToRead - определяет количество байтов, которые необходимо прочитать из файла

lpNumberOfBytesRead – определяет, сколько прочитано байтов из файла

В случае если указатель lpOverlapped равен нулю, то nNumberOfBytesRead не может быть равным нулю.

lpOverlapped -указывает на структуру OVERLAPPED, которую здесь мы рассматривать не будем. Если hFile был создан с флагом FILE_FLAG_OVERLAPPED, указатель lpOverlapped не должен быть равен нулю.

Если hFile был открыт с флагом FILE_FLAG_OVERLAPPED и указатель lpOverlapped не равен NULL, операция чтения начинается со смещения указанного в структуре OVERLAPPED и может вернуть результат до завершения операции чтения. В этом случае об окончании операции чтения, сигнализирует событие в структуре OVERLAPPED.

Если hFile был открыт без флага FILE_FLAG_OVERLAPPED и указатель lpOverlapped равен NULL, операция чтения начинается со текущей позиции файл и не может вернуть результат до завершения операции чтения.

Если hFile был открыт без флага FILE_FLAG_OVERLAPPED и указатель lpOverlapped не равен NULL, операция чтения начинается со смещения указанного в структуре OVERLAPPED и не может вернуть результат до завершения операции чтения.

Возвращает ненулевой результат в случае успешного завершения.

Пример вызова:

ReadFile(hSrc, pBuffer, fsize, &read, NULL);

2.3. Запись в файл

Для записи в файл используется функция WriteFile, которая записывает данные в файл, начиная с позиции, определенной файловым указателем..

BOOL WriteFile(

HANDLE hFile, // дескриптор файла для записи

LPCVOID lpBuffer, // указатель на данные для записи

DWORD nNumberOfBytesToWrite, // количество байт для записи

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

LPOVERLAPPED lpOverlapped // указатель на структуру OVERLAPPED

);

hFile – дескриптор файла для записи, должен быть открыт с доступом GENERIC_WRITE

lpBuffer – указывает на буфер, содержащий данные для записи

nNumberOfBytesToWrite- определяет количество байт для записи

lpNumberOfBytesWritten - указатель на количество фактически записанных байт

lpOverlapped- указатель на структуру OVERLAPPED

В случае успешного завершения возвращает ненулевое значение.

Пример вызова:

WriteFile(hDest, pBuffer, txt_length+1, &written, NULL);

2.4. Перемещение указателя файла

Для перемещения указателя по открытому файлу используется функция

DWORD SetFilePointer(

HANDLE hFile, // дескриптор файла

LONG lDistanceToMove, // смещение в байтах

PLONG lpDistanceToMoveHigh, // указатель на смещение в байтах

DWORD dwMoveMethod // точка отсчета

);

hFile – дескриптор файла

lDistanceToMove – 32 битное значение, количество байт, на которое необходимо сдвинуть указатель

lpDistanceToMoveHigh – если количество байт, на которое необходимо сдвинуть указатель файла превышает 32 бита, то данный параметр является указывает на старшее слово в 64 битном смещении, которое надо осуществить. NULL если смещение превышает 32 бита.

dwMoveMethod – точка отсчета, от которой необходимо отсчитывать смещение.

Таблица 2.1. Значения dwMoveMethod

Значение

Семантика

FILE_BEGIN

Точка отсчета - начало файла.

FILE_CURRENT

Точка отсчета – текущая позиция.

FILE_END

Точка отсчета – конец файла.

После работы с файлом его необходимо закрыть, для этого используется функция CloseHandle.

BOOL CloseHandle(

HANDLE hObject // дескриптор объекта для закрытия

);

hObject – определяет дескриптор объекта (файла)

Возвращает в случае успешного завершения ненулевое значение.

Пример вызова:

// закрытие файла

CloseHandle(hDest);

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]