Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Razoryonov_2008_full.doc
Скачиваний:
0
Добавлен:
26.12.2019
Размер:
1.34 Mб
Скачать

24 Операции с файлом (Win32 api)

1) Позиционирование файлового указателя

Когда CreateFile возвращает описатель файла, система связывает с этим описателем файловый указатель. Он определяет 64-разрядное смещение внутри файла, начиная с которого будет выполняться очередная операция синхронного чтения или записи. Сначала файловый указатель устанавливается в 0, и, если вызвать ReadFile или WriteFile, то указатель сместиться на количество прочитанных / записанных байтов.

Для произвольного доступа к файлу используется функция

DWORD SetFilePointer(HANDLE hFile, LONG lDistanceToMove, PLONG lpDistanceToMoveHigh, DWORD dwMoveMethod);

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

Параметр lDistanceToMove сообщает системе, на сколько байтов Вы хотите сместить указатель. Передаваемое число добавляется к текущему значению указателя, поэтому отрицательное число позволяет перемещаться назад.

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

Параметр dwMoveMethod сообщает функции SetFilePointer, как интерпретировать параметры lDistanceToMove и lpDistanceToMoveHigh (FILE_BEGIN, FILE_CURRENT, FILE_END).

2) Установка конца файла

Обычно система сама устанавливает конец файла при его закрытии. Но иногда нужно принудительно укоротить или расширить файл. Для этого используется функция

BOOL SetEndOfFile(HANDLE hFile);

Она изменяет длину файла по текущему значению файлового указателя.

3) Блокировка и разблокировка участков файла

Блокировка участка файла осуществляется вызовом функции:

BOOL LockFile(HANDLE hFile, DWORD dwFileOffsetLow, DWORD dwFileOffsetHigh, DWORD nNumberOfBytesToLockLow, DWORD nNumberOfBytesToLockHigh);

Параметр hFile идентифицирует описатель файла, участок которого нужно блокировать.

Параметры dwFileOffsetLow и dwFileOffsetHigh определяют 64-битное смещение начала блокируемого участка внутри файла, а параметры nNumberOfBytesToLockLow и nNumberOfBytesToLockHigh – число блокируемых байтов.

Для разблокирования участка файла используется функция:

BOOL UnlockFile(HANDLE hFile, DWORD dwFileOffsetLow, DWORD dwFileOffsetHigh, DWORD nNumberOfBytesToLockLow, DWORD nNumberOfBytesToLockHigh);

Ее параметры аналогичны предыдущей функции.

4) Чтение запись

Для чтения используется функция:

BOOL ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped);

Для записи используется функция:

BOOL WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped);

Хотя в именах функций есть слово File, эти функции можно использовать для работы с любым устройством.

Параметр hFile – описатель устройства, к которому необходимо получить доступ.

Параметр lpBuffer указывает на буфер, в который считываются данные с устройства (или из которого записываются данные на устройство).

Параметры nNumberOfBytesToRead и nNumberOfBytesToWrite сообщают функциям ReadFile и WriteFile, сколько байтов следует прочесть с устройства или записать на него.

Параметр lpOverlapped используется для асинхронного ввода/вывода.

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