Функция SetFilePointer
С помощью функции SetFilePointer приложение может выполнять прямой доступ к файлу, перемещая указатель текущей позиции, связанный с файлом. Сразу после открывания файла этот указатель устанавливается в начало файла. Затем он передвигается функциями ReadFile и WriteFile на количество прочитанных или записанных байт, соответственно.
Функция SetFilePointer позволяет выполнить установку текущей позиции:
DWORD SetFilePointer(
HANDLE hFile, // идентификатор файла
LONG lDistanceToMove, // количество байт, на которое будет
// передвинута текущая позиция
PLONG lpDistanceToMoveHigh, // адрес старшего слова,
// содержащего расстояние для перемещения позиции
DWORD dwMoveMethod); // способ перемещения позиции
Через параметр hFile вы должны передать этой функции идентификатор файла, для которого выполняется изменение текущей позиции.
Параметр lDistanceToMove, определяющий дистанцию, на которую будет передвинута текущая позиция, может принимать как положительные, так и отрицательные значения. В первом случае текущая позиция переместится по направлению к концу файла, во втором - к началу файла.
Если вы работаете с файлами, размер которых не превышает 232
- 2 байта, для параметра lpDistanceToMoveHigh можно указать значение NULL. В том случае, когда ваш файл очень большой, для указания смещения может потребоваться 64-разрядное значение. Для того чтобы указать очень большое смещение, вы должны записать старшее 32-разрядное слово этого 64-разрядного значения в переменную, и передать функции SetFilePointer адрес этой переменной через параметр lpDistanceToMoveHigh. Младшее слово смещения следует передавать как и раньше, через параметр lDistanceToMove.
Параметр dwMoveMethod определяет способ изменения текущей позиции и может принимать одно из перечисленных ниже значений:
Значение | Описание | ||
FILE_BEGIN | Смещение отсчитывается от начала файла, при этом значение смещения трактуется как беззнаковая величина | ||
FILE_CURRENT | Смещение отсчитывается от текущей позиции в файле и может принимать как положительные, так и отрицательные значения | ||
FILE_END | Смещение отсчитывается от конца файла и трактуется как отрицательная величина |
В случае успешного завершения функция SetFilePointer возвращает младшее слово новой 64-разрядной позиции в файле. Старшее слово при этом записывается по адресу, заданному параметром lpDistanceToMoveHigh.
При ошибке функция возвращает значение 0xFFFFFFFF. При этом в слово по адресу lpDistanceToMoveHigh записывается значение NULL. Код ошибки вы можете получить при помощи функции GetLastError.