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

Закрытие файлов

Теперь о том, как закрыть файл. Для закрытия файла вы должны использовать функцию _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 при ошибке.

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