Функция SetFilePointer

Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long
SetFilePointer меняет позицию указателя файла в открытом файле. Указатель файла можно устанавливать в разных местах файла - в начале, в середине, в конце.
Так как параметр lDistanceToMove имеет тип Long, то мы не сможем установить указатель в слишком большом файле на любое место. В этом случае используется другой аргумент lpDistanceToMoveHigh, содержащий старшие 32 разряда требуемого значения

Возвращаемое значение

В случае ошибки функция возвращает -1 (используйте GetLastError для получения кода ошибки). В успешном случае функция возвращает младшее слово новой позиции указателя файла. Старшее слово передается в переменную lpDistanceToMoveHigh

Параметры

hFile
Дескриптор открытого файла для манипулирования указателем файла
lDistanceToMove
Младшее слово 64-битного числа, указывающее на число байт, на которое необходимо передвинуть указатель файла
lpDistanceToMoveHigh
Переменная, содержащаея старшее слово 64-битного числа, указывающее на число байт, на которое необходимо передвинуть указатель файла
dwMoveMethod
Один из следующих флагов, определяющих точку отчета для перемещения указателя файла:
FILE_BEGIN=0Начало файла-самый первый байт файла
FILE_CURRENT=1Текущая позиция указателя файла
FILE_END=2Конец файла-указатель находится сразу после последнего байта файла

Пример

' Читаем две четырехбуквенные строчки файла "C:\autoexec.bat",
' начиная с третьего байта от начала файла,
' и с пятого файла от конца
Dim strbuf As String * 4  ' четырехбайтовое слово
Dim lowbyte As Long, highbyte As Long
Dim numread As Long  ' число байт для чтения
Dim hFile As Long  ' дескриптор открытого слова
Dim retval As Long ' возвращаемое значение

' Открываем файл для чтения
hFile = CreateFile("C:\autoexec.bat", GENERIC_READ, FILE_SHARE_READ, ByVal CLng(0), OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, 0)
If hFile = -1 Then
  Debug.Print "Невозможно открыть файл - возможно он не существует"
  End  ' выходим из программы
End If

' Устанавливаем указатель на третьем байте(отсчет идет с 0)
lowbyte = 2: highbyte = 0  ' это равно 2
lowbyte = SetFilePointer(hFile, lowbyte, highbyte, FILE_BEGIN)  ' устанавливаем указатель в начало файла
' Теперь читаем четыре символа
retval = ReadFile(hFile, ByVal strbuf, 4, numread, ByVal CLng(0))
Debug.Print "Строчка с третьего байта: "; strbuf

' Установим указатель файла на пять байтов перед
' началом файла.Теперь можно манипулировать значениями
' lowbyte и highbyte
lowbyte = (Not 5) + 1: highbyte = Not 0  ' соответствует -5
lowbyte = SetFilePointer(hFile, lowbyte, highbyte, FILE_END)  ' перемещаем указатель в конец файла
' Читаем четыре символа с конца файла
retval = ReadFile(hFile, ByVal strbuf, 4, numread, ByVal CLng(0))
Debug.Print "Строчка с конца файла: "; strbuf

' Закрываем файл
retval = CloseHandle(hFile)

Смотри также

ReadFile, WriteFile

Категория

Файлы