FileSeek 関数
この関数は、開いているファイルのファイルポインタの現在位置を指定したバイト数だけ移動します。
データ型と構成・戻り値
ulong FileSeek(①, ②, ③);
戻り値は、開いているファイルのファイルポインタの現在位置をバイト単位で返します。
発生するエラーについては、GetLastError関数で取得することができます。
引数 [3]
FileSeek関数は 3個の引数で構成されます。
番 号 | 引数名 | データ型 | 単位 | 初期値 | 説明 |
---|---|---|---|---|---|
① | file_handle | int | - | - | FileOpen関数によって取得されるファイルハンドル。 |
② | offset | long | - | - | バイト単位の移動。負の値の時は先頭の方へ移動します。 |
③ | origin | enum | - | - | フィルタポイントの開始点。ENUM_FILE_POSITION から選択します。 |
引数②が負のシフト (ファイルの「レベル境界」を超える) になる場合、ファイル ポインタはファイルの先頭に設定されます。
ファイルの「右境界」を超えて (ファイルサイズよりも大きい) 位置を設定した場合、ファイルへの次の書き込みは、ファイルの末尾からではなく、設定された位置から実行されます。この場合、前のファイルの終わりと設定された位置に不定値が書き込まれます。
使用例
FileSeek関数によるファイルポインタの移動
FileSeek関数を使ってファイルポインタの現在位置を移動します。今回「test.txt」ファイルに FileWrite関数で「testです」と文字を書き、そこからファイルポインタの位置を「です」の前まで戻して、そこに「テスト」と文字で上書きします。
この時、移動させるバイト数は「です」の全角文字 2つの 4バイト分と「です」の後ろに付く改行の 2バイト分があるので、合計 6バイト分、先頭の方に戻すことになります。
作成した「test.txt」ファイルの場所については FileOpen関数のページで確認してください。
コード
// FileSeek関数によるファイルポインタの移動
#property strict
void OnInit() {
string filename = "test.txt"; // ファイル名
int handle; // ファイルハンドル
handle = FileOpen(filename, FILE_READ | FILE_WRITE | FILE_TXT );
FileWrite(handle, "testです");
FileSeek(handle, -6, SEEK_CUR); // ファイルポインタの位置を先頭の方向へ6バイト分移動
FileWrite(handle, "テスト");
FileSeek(handle, 0, SEEK_SET); // ファイルポインタの位置を先頭に移動
Print("ファイルの内容:", FileReadString(handle));
FileClose(handle);
}
コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)
結果
「test.txt」ファイル状態
![](https://naruhodo-mt4.com/wp-content/uploads/2023/03/P648fileseek.png)
![](https://naruhodo-mt4.com/wp-content/uploads/2023/03/P647fileseek.png)