<Return[S]><Top>

SetFilePointer

Declare Function Api_SetFilePointer& Lib "kernel32" Alias "SetFilePointer" (ByVal hFile&, ByVal lDistanceToMove&, lpDistanceToMoveHigh&, ByVal dwMoveMethod&)

Declare Function SetFilePointer Lib "kernel32" Alias "SetFilePointer" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long

開いているファイルのファイルポインタを移動する。
この関数は、ファイルポインタを 2 個の DWORD 値に分けて格納する。1 個の DWORD 値に格納できないファイルポインタ(2GB を超えるファイルに適用)をより簡単に扱うには、SetFilePointerEx 関数を使う。

パラメータ
hFile
    ファイルポインタを移動するべきファイルのハンドルを指定する。

    このハンドルは、GENERIC_READ または GENERIC_WRITE アクセス権を指定して作成したものでなければならない。
lDistanceToMove
    ファイルポインタの移動バイト数を保持している、符号付きの下位(low-order)32 ビットの値を指定する。

    lpDistanceToMoveHigh パラメータで NULL 以外の値を指定すると、lpDistanceToMoveHigh と lpDistanceToMove の 2 個のパラメータ

    を組み合わせて 1 個の符号付き 64 ビット値を形成して、移動バイト数を指定する。

    lpDistanceToMoveHigh が NULL の場合、lpDistanceToMove は 1 個の符号付き 32 ビット値として機能する。

    lpDistanceToMoveHigh で正の値を指定するとファイルの前方(ファイルの終わりへ向かって)移動し、負の値を指定すると後方(ファイル

    の先頭へ向かって)移動する。
lpDistanceToMoveHigh
    移動バイト数を表す符号付き 64 ビットのうち、上位(high-order)32 ビットの値へのポインタを指定する。

    上位 32 ビットが必要ない場合(ファイルの大きさが 2GB 以内)、このパラメータで NULL を指定できる。

    NULL 以外の値を指定し、関数が成功した場合、このパラメータは、ファイルポインタの新しい位置を表す値の上位 DWORD を受け取

    る。
    Windows 95/98:lpDistanceToMoveHigh パラメータで NULL 以外の値を指定する場合、0 と -1 のどちらかを指定しなければならない。

    これは、lDistanceToMove パラメータの符号拡張であり、lDistanceToMove パラメータ単独で、2GB ではなく 4GB の大きさを表せるように

    なる。それ以外の値は拒否される。
dwMoveMethod
    ファイルポインタを移動するための開始点(基準点)を指定する。次の値のいずれかを指定する。

    値                           

意味                                                               

    FILE_BEGIN

開始点は 0、つまりファイルの先頭である。

    FILE_CURRENT

開始点は、ファイルポインタの現在の位置である。

    FILE_END

開始点は、ファイルの終わり(EOF)である。


戻り値
    lpDistanceToMoveHigh パラメータで NULL を指定した場合、関数が成功すると、新しいファイルポインタの下位 DWORD が返る。

    また、lpDistanceToMoveHigh パラメータで NULL 以外の値を指定した場合、関数が成功すると、新しいファイルポインタの下位

    DWORD が返り、そのパラメータが指す LONG 値に、新しいファイルポインタの上位 DWORD が格納される。
    lpDistanceToMoveHigh パラメータが NULL の場合、関数が失敗すると、INVALID_SET_FILE_POINTER が返る。

    拡張エラー情報を取得するには、GetLastError 関数を使う。
    lpDistanceToMoveHigh パラメータが NULL 以外の場合、関数が失敗すると、INVALID_SET_FILE_POINTER が返る。

    ただし、INVALID_SET_FILE_POINTER に相当する数値は新しいファイルポインタの下位 DWORD として有効な値なので、

    GetLastError 関数を呼び出してエラーが発生したかどうかをチェックしなければならない。

    エラーが発生していた場合、GetLastError 関数は NO_ERROR 以外の値を返す。
    新しいファイルポインタの値が負の数値になる場合、この関数は失敗し、GetLastError は ERROR_NEGATIVE_SEEK を返す。