Function Reference

_WinAPI_SetFilePointer

指定されたファイルのファイルポインタを移動します。

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

 

パラメータ

$hFile 処理されるファイルのハンドル
$iPos ファイルポインタの移動バイト数。最大値は2^32です。
ファイル内では正の数でファイルポインタを前進させ、負の数でファイルポインタを後退させます。
$iMethod [オプション]ァイルポインタの移動開始位置
定義済み値の1つを使用できます:
$FILE_BEGIN = 0 - 開始位置はゼロ(0)またはファイルの先頭です
$FILE_CURRENT = 1 - 開始位置はファイルポインタの現在の位置です
$FILE_END = 2 - 開始位置は現在のファイル終了位置です
デフォルト値は$FILE_BEGIN = 0です

 

返し値

成功: 新しいファイルポインタ
失敗: INVALID_SET_FILE_POINTER (-1)を返し、@Errorを設定します
@error: 0 - 正常終了
2 - API がINVALID_SET_FILE_POINTERを返しました

 

注意

この関数は移動開始位置にFILE_CURRENTを、移動バイト数に0を指定することで現在のファイルポインタ位置を取得するために使用することもできます。
この関数はファイルポインタをLONG値に保存します。LONG値よりも大きいファイルポインタを使用する場合はSetFilePointerEx関数を使用する必要があります。
ファイルポインタとは_WinAPI_ReadFile/_WinAPI_WriteFileによって使用されるファイルの読み取り位置/書き込み位置のことです。

 

関連

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

 

こちらも参照

MSDNライブラリでSetFilePointerを検索して下さい。

 


#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6

#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) 位置3から6バイト読み込む
$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) 先ほど位置3から読み込んだ6バイトを同じ位置に大文字で書き込む
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)