Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long
В случае ошибки функция возвращает -1 (используйте GetLastError для получения кода ошибки). В успешном случае функция возвращает младшее слово новой позиции указателя файла. Старшее слово передается в переменную lpDistanceToMoveHigh
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)