Ввод-вывод с использованием WinAPI
9.1.3. Функции чтения-записи в файл
Для операций чтения-записи в файл Microsoft Windows применяются следующие функции:
ФУНКЦИЯ | _lread |
СИНТАКСИС: |
UINT WINAPI _lread( hf, hpvBuffer, cbBuffer )
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 )
void _huge *hpvBuffer - адрес буфера с содержимым файла; long cbBuffer - размер буфера; |
НАЗНАЧЕНИЕ: | Функция читает содержимое файла, определённого дескриптором, в текстовый буфер. Размер буфера ограничен 2 Гбайт; |
ОПИСАНИЕ: | Функция предназначена для чтения информации из файла в буфер памяти. Через параметр hf функции следует передать идентификатор файла, для которого необходимо сделать операцию чтения. Прочитанные данные будут записаны в буфер hpvBuffer, имеющий размер cbBuffer байт. Этот буфер можно получить динамически, вызвав функцию GlobalAlloc ; |
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: | Функция возвращает количество байт данных, прочитанных из файла. Возвращённое значение может быть меньше затребованного в параметре cbBuffer, если достигнут конец файла. При ошибке функция возвращает значение HFILE_ERROR. |
ПЕРЕНОСИМОСТЬ: | MS Windows 3.1 и старше; |
ФУНКЦИЯ | _lwrite |
СИНТАКСИС: |
UINT WINAPI _hread( hf, hpvBuffer, cbBuffer )
void _huge *hpvBuffer - адрес буфера с содержимым файла; UINT cbBuffer - размер буфера; |
НАЗНАЧЕНИЕ: | Функция записывает содержимое текстового буфера в файл, определённого дескриптором. Размер буфера ограничен 64 Кбайт; |
ОПИСАНИЕ: | Назначение параметров этой функции аналогично назначению параметров функции _lread, Перед вызовом функции _lwrite буфер должен содержать данные, записываемые в файл; |
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: | Функция возвращает количество байт данных, записанных в файл, или значение HFILE_ERROR при ошибке; |
ПЕРЕНОСИМОСТЬ: | MS Windows 3.0 и старше; |
ФУНКЦИЯ | _hwrite |
СИНТАКСИС: |
long WINAPI _hread( hf, hpvBuffer, cbBuffer )
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 и старше; |
Константа | Описание |
---|---|
ФУНКЦИЯ 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) к данной лекции.