- •Дополнительная информация из интернета
- •Открытие файлов
- •Стандартные диалоговые панели для открытия файлов
- •NMaxCustFilter - Определяет размер буфера в байтах, указанного в поле lpstrCustomFilter. Размер этого буфера должен быть не меньше 40 байт.
- •Закрытие файлов
- •Создание файлов
- •Чтение и запись
- •Позиционирование
- •Определение типа устройства ввода/вывода
- •Использование стандартной библиотеки транслятора
Закрытие файлов
Теперь о том, как закрыть файл. Для закрытия файла вы должны использовать функцию _lclose :
HFILE WINAPI _lclose(HFILE hf);
Идентификатор закрываемого файла передается функции через параметр hf.
Если файл закрыт успешно, функция _lclose возвращает нулевое значение. При ошибке возвращается значение HFILE_ERROR.
Создание файлов
Для создания файлов вы можете использовать как универсальную функцию OpenFile, описанную нами ранее, так и более простую функцию _lcreat :
HFILE WINAPI _lcreat(LPCSTR lpszFileName, int fuAttribute);
В качестве параметра lpszFileName этой функции необходимо передать адрес строки, содержащей путь к создаваемому файлу в кодировке ANSI.
С помощью параметра fuAttribute можно определить атрибуты создаваемого файла:
Значение атрибута |
Описание |
0 |
Нормальный файл, для которого разрешено выполнение операций чтения и записи |
1 |
Этот файл можно открыть только для чтения |
2 |
Скрытый файл |
3 |
Системный файл |
Если указанный первым параметром файл не существует, функция _lcreat создает его и открывает для записи, возвращая идентификатор файла. Если файл существует, он обрезается до нулевой длины и затем открывается для чтения и записи.
Чтение и запись
Для выполнения операций чтения и записи в программном интерфейсе операционной системы Windows версии 3.1 предусмотрены четыре функции: _lread, _hread, _lwrite, _hwrite.
Функция _lread предназначена для чтения из открытого файла:
UINT WINAPI _lread(
HFILE hf, // идентификаторфайла
void _huge* hpvBuffer, // адресбуфера
UINT cbBuffer); // размербуфера
Функция возвращает количество байт данных, прочитанных из файла. Возвращенное значение может быть меньше затребованного в параметре cbBuffer, если в процессе чтения был достигнут конец файла. При ошибке функция возвращает значение HFILE_ERROR.
Через параметр hf функции следует передать идентификатор файла, для которого необходимо выполнить операцию чтения.
Прочитанные данные будут записаны в буфер hpvBuffer, имеющий размер cbBuffer байт. Этот буфер можно получить динамически, вызывав, например, функцию GlobalAlloc или LocalAlloc. Размер буфера не должен превышать 65534 байт.
В программном интерфейсе операционной системы Windows версии 3.1 появилась функция _hread , с помощью которой можно выполнять чтение из файла блоков практически любого размера:
long WINAPI _hread(
HFILE hf, // идентификаторфайла
void _huge* hpvBuffer, // адресбуфера
long cbBuffer); // размербуфера
Так же как и функция _lread, функция _hread возвращает количество байт данных, прочитанных из файла. Возвращенное значение может быть меньше затребованного в параметре cbBuffer, если в процессе чтения был достигнут конец файла. При ошибке функция возвращает значение HFILE_ERROR.
Вы можете с помощью функции GlobalAlloc заказать для функции _hread буфер размером, большим 64 Кбайт.
С помощью функции _lwrite вы можете выполнить запись данных в файл:
UINT WINAPI _lwrite(
HFILE hf, // идентификатор файла
void _huge* hpvBuffer, // адрес буфера
UINT cbBuffer); // размер буфера
Назначение параметров этой функции аналогично назначению параметров функции _lread. Перед вызовом функции _lwrite буфер должен содержать записываемые в файл данные.
Функция возвращает количество байт данных, записанных в файл, или значение HFILE_ERROR при ошибке.
Если вам надо писать в файл блоки, имеющие размер больше 64 Кбайт, воспользуйтесь функцией _hwrite , которая впервые появилась в программном интерфейсе Windows версии 3.1:
long WINAPI _hwrite(
HFILE hf, // идентификаторфайла
void _huge* hpvBuffer, // адресбуфера
long cbBuffer); // размербуфера
Назначение параметров функции аналогично назначению параметров функции _lwrite. Функция возвращает количество байт данных, записанных в файл, или значение HFILE_ERROR при ошибке.
