Функция _WinAPI_SetFilePointer

 ↑  ←  Описание функции


_WinAPI_SetFilePointer

Перемещает указатель файла

#include <WinAPI.au3>
_WinAPI_SetFilePointer($hFile, $iPos [, $iMethod = 0])

Параметры

$hFile Дескриптор файла
$iPos Количество байтов для перемещения указателя в файле. Максимальное значение 2^32
    Положительное значение перемещает указатель вперед, а отрицательное - назад.
$iMethod [необязательный] Начальная позиция указателя.
    Может быть одним из следующих значений:
    $FILE_BEGIN = 0 - Начальная позиция - ноль (0) или собственно начало файла (по умолчанию)
    $FILE_CURRENT = 1 - Начальная позиция - текущее значение указателя.
    $FILE_END = 2 - Начальная позиция - конец файла.

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

Успех:Возвращает новый файловый указатель.
Ошибка:Возвращает INVALID_SET_FILE_POINTER (-1) и устанавливает @error
@error:0 - Нет ошибок
2 - API возвратил INVALID_SET_FILE_POINTER

Примечания

Эта функция также может использоваться для запроса текущей позиции указателя при $iMethod = $FILE_CURRENT и $iPos = 0.
This function stores the file pointer in LONG value. To work with file pointers that are larger than a single LONG value, it must be used the SetFilePointerEx function.
Файловый указатель это позиция в файле, от которой выполняется чтение/запись функциями _WinAPI_ReadFile/_WinAPI_WriteFile

См. также

_WinAPI_CloseHandle, _WinAPI_CreateFile, _WinAPI_FlushFileBuffers, _WinAPI_GetFileSizeEx, _WinAPI_ReadFile, _WinAPI_SetEndOfFile, _WinAPI_WriteFile

См. также

Искать SetFilePointer в библиотеке MSDN

Пример


#include <WinAPI.au3>

Global $sFile, $hFile, $sText, $nBytes, $tBuffer

; 1) Создаёт файл и записывает данные в него
$sFile = @ScriptDir & '\test.txt'
$sText = 'abcdefghijklmnopqrstuvwxyz'
$tBuffer = DllStructCreate("byte[" & StringLen($sText) & "]")
DllStructSetData($tBuffer, 1, $sText)
$hFile = _WinAPI_CreateFile($sFile, 1)
_WinAPI_WriteFile($hFile, DllStructGetPtr($tBuffer), StringLen($sText), $nBytes)
_WinAPI_CloseHandle($hFile)
ConsoleWrite('1) ' & FileRead($sFile) & @CRLF)

; 2) Читает 6 байтов из позиции 3
$tBuffer = DllStructCreate("byte[6]")
$hFile = _WinAPI_CreateFile($sFile, 2, 2)
_WinAPI_SetFilePointer($hFile, 3)
_WinAPI_ReadFile($hFile, DllStructGetPtr($tBuffer), 6, $nBytes)
_WinAPI_CloseHandle($hFile)
$sText = BinaryToString(DllStructGetData($tBuffer, 1))
ConsoleWrite('2) ' & $sText & @CRLF)

; 3) Записывает предыдущие прочитанные 6 байтов из позиции 3, в ту же позицию, но в верхнем регистре
DllStructSetData($tBuffer, 1, StringUpper($sText))
$hFile = _WinAPI_CreateFile($sFile, 2, 4)
_WinAPI_SetFilePointer($hFile, 3)
_WinAPI_WriteFile($hFile, DllStructGetPtr($tBuffer), 6, $nBytes)
_WinAPI_CloseHandle($hFile)
$tBuffer = 0
ConsoleWrite('3) ' & FileRead($sFile) & @CRLF)

; 4) Обрезает размер файла до 12 байт
$hFile = _WinAPI_CreateFile($sFile, 2, 4)
_WinAPI_SetFilePointer($hFile, 12)
_WinAPI_SetEndOfFile($hFile)
_WinAPI_CloseHandle($hFile)
ConsoleWrite('4) ' & FileRead($sFile) & @CRLF)