Опубликован: 15.11.2010 | Уровень: для всех | Доступ: платный
Лекция 9:

Ввод-вывод с использованием WinAPI

9.1.3. Функции чтения-записи в файл

Для операций чтения-записи в файл Microsoft Windows применяются следующие функции:

ФУНКЦИЯ _lread
СИНТАКСИС: UINT WINAPI _lread( hf, hpvBuffer, cbBuffer )

HFILE hf - дескриптор файла;

void _huge *hpvBuffer - адрес буфера с содержимым файла;

UINT cbBuffer - размер буфера;

НАЗНАЧЕНИЕ: Функция читает содержимое файла, определённого дескриптором, в текстовый буфер. Размер буфера ограничен 64 Кбайт;
ОПИСАНИЕ: Функция предназначена для чтения информации из файла в буфер памяти. Через параметр hf функции следует передать идентификатор файла, для которого необходимо сделать операцию чтения. Прочитанные данные будут записаны в буфер hpvBuffer, имеющий размер cbBuffer байт. Этот буфер можно получить динамически, вызвав, например, функцию GlobalAlloc или, что лучше с точки зрения совместимости, LocalAlloc. Размер буфера не должен превышать 65 534 байт.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Функция возвращает количество байт данных, прочитанных из файла. Возвращённое значение может быть меньше затребованного в параметре cbBuffer, если достигнут конец файла. При ошибке функция возвращает значение HFILE_ERROR.
ПЕРЕНОСИМОСТЬ: MS Windows 3.0 и старше;

ФУНКЦИЯ _hread
СИНТАКСИС: long WINAPI _hread( hf, hpvBuffer, cbBuffer )

HFILE hf - дескриптор файла;

void _huge *hpvBuffer - адрес буфера с содержимым файла;

long cbBuffer - размер буфера;

НАЗНАЧЕНИЕ: Функция читает содержимое файла, определённого дескриптором, в текстовый буфер. Размер буфера ограничен 2 Гбайт;
ОПИСАНИЕ: Функция предназначена для чтения информации из файла в буфер памяти. Через параметр hf функции следует передать идентификатор файла, для которого необходимо сделать операцию чтения. Прочитанные данные будут записаны в буфер hpvBuffer, имеющий размер cbBuffer байт. Этот буфер можно получить динамически, вызвав функцию GlobalAlloc ;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Функция возвращает количество байт данных, прочитанных из файла. Возвращённое значение может быть меньше затребованного в параметре cbBuffer, если достигнут конец файла. При ошибке функция возвращает значение HFILE_ERROR.
ПЕРЕНОСИМОСТЬ: MS Windows 3.1 и старше;

ФУНКЦИЯ _lwrite
СИНТАКСИС: UINT WINAPI _hread( hf, hpvBuffer, cbBuffer )

HFILE hf - дескриптор файла;

void _huge *hpvBuffer - адрес буфера с содержимым файла;

UINT cbBuffer - размер буфера;

НАЗНАЧЕНИЕ: Функция записывает содержимое текстового буфера в файл, определённого дескриптором. Размер буфера ограничен 64 Кбайт;
ОПИСАНИЕ: Назначение параметров этой функции аналогично назначению параметров функции _lread, Перед вызовом функции _lwrite буфер должен содержать данные, записываемые в файл;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Функция возвращает количество байт данных, записанных в файл, или значение HFILE_ERROR при ошибке;
ПЕРЕНОСИМОСТЬ: MS Windows 3.0 и старше;

ФУНКЦИЯ _hwrite
СИНТАКСИС: long WINAPI _hread( hf, hpvBuffer, cbBuffer )

HFILE hf - дескриптор файла;

void _huge *hpvBuffer - адрес буфера с содержимым файла;

long cbBuffer - размер буфера;

НАЗНАЧЕНИЕ: Функция записывает содержимое текстового буфера в файл, определённого дескриптором. Размер буфера ограничен 2 Гбайт;
ОПИСАНИЕ: Назначение параметров этой функции аналогично назначению параметров функции _hread, Перед вызовом функции _lwrite буфер должен содержать данные, записываемые в файл;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Функция возвращает количество байт данных, записанных в файл, или значение HFILE_ERROR при ошибке;
ПЕРЕНОСИМОСТЬ: MS Windows 3.1 и старше;

ФУНКЦИЯ GetDriveType
СИНТАКСИС: UINT WINAPI GetDriveType( DriveNumber )

int DriveNumber - определяет номер диска, для которого требуется определить тип и расположение: (0 соответствует устройству A:, 1 - B;, 2 - C: и т.д.)

НАЗНАЧЕНИЕ: Позволяет определить тип и расположение используемого дискового блочного устройства ввода-вывода;
ОПИСАНИЕ: Иногда требуется определить тип и расположение используемого блочного устройства ввода-вывода. Для этого необходимо использовать эту функцию;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Функция может вернуть нуль при ошибке или одно их следующих значений (смотри таблицу 9.2);
ПЕРЕНОСИМОСТЬ: MS Windows 3.0 и старше;
Таблица 9.2. Константы функции GetDriveType
Константа Описание
ФУНКЦИЯ GetDriveType
DRIVE_REMOVABLE Сменный диск
DRIVE_FIXED Несменный диск
DRIVE_REMOTE Удалённый диск, расположен на другой машине в сети

9.1.4. Стандартные "диалоги" открытия и сохранения файлов

Основным способом задания имени файла для его открытия (или сохранения) средствами Windows является не командная строка, а диалоговые окна "Open" (для открытия файла) и "Save As" (для задания имени сохраняемого файла). Эти диалоговые окна вызываются с помощью ниже перечисленных функций:

ФУНКЦИЯ GetOpenFileName
ОПРЕДЕЛЕНА В: commdlg.dll (<commdlg.h>)
СИНТАКСИС: BOOL WINAPI GetOpenFileName( lpofn )

OPENFILENAME FAR *lpofn - структура данных, определяющая внешний вид диалоговых панелей;

НАЗНАЧЕНИЕ: Вызов диалогового окна "Open…" для получения полного имени для открытия файла;
ОПИСАНИЕ: Функция выводит стандартную диалоговую панель для открытия файлов. Параметры отображения считываются и заносятся в структуру OPENFILENAME ;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Функция возвращает ненулевое значение, если пользователь сделал выбор файла, и ноль, если он отказался от выбора, нажав кнопку "Cancel" или выбрав пункт "Close" из системного меню диалоговой панели. Нулевое значение возвращается также при возникновении ошибок;
ПЕРЕНОСИМОСТЬ: Только MS Windows 3.1. На новых системах (Windows 95 и старше) она, возможно, заменена другими инструментами;

ФУНКЦИЯ GetSaveFileName
ОПРЕДЕЛЕНА В: commdlg.dll (<commdlg.h>)
СИНТАКСИС: BOOL WINAPI GetSaveFileName( lpofn )

OPENFILENAME FAR *lpofn - структура данных, определяющая внешний вид диалоговых панелей;

НАЗНАЧЕНИЕ: Вызов диалогового окна "Save As…" для получения полного имени для сохранения файла на диске;
ОПИСАНИЕ: Функция выводит стандартную диалоговую панель для сохранения файлов. Параметры отображения считываются и заносятся в структуру OPENFILENAME ;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Функция возвращает ненулевое значение, если пользователь сделал выбор файла, и ноль, если он отказался от выбора, нажав кнопку "Cancel" или выбрав пункт "Close" из системного меню диалоговой панели. Нулевое значение возвращается также при возникновении ошибок;
ПЕРЕНОСИМОСТЬ: Только MS Windows 3.1. На новых системах (Windows 95 и старше) она, возможно, заменена другими инструментами;

Описание синтаксиса структуры, описывающей внешний вид и поведение диалоговых окон, смотри в приложение №2 (п. 9.5) к данной лекции.

Artem Bardakov
Artem Bardakov
Россия
Андрей Алабин
Андрей Алабин
Россия