ファイルの読み込み
それではこのページではファイル読み込みの基本的な流れを記載していきます。
ファイルを開く
data.datというファイルを開く場合は下記のようになります。
HANDLE hFile = CreateFile("data.dat", GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
これでdata.datというファイルを読み込みモードで開いています。
もしファイルが存在しない場合は hFile に INVALID_HANDLE_VALUE が返ってきます。
ファイルを読み込む
次に開いたファイルからデータを読み込みます。
DWORD dwSize; int data; ReadFile(hFile, &data, sizeof(data), &dwSize, NULL);
これで hFile で制御されたファイルから int サイズのデータを data に対して読み込むことができます。
dwSize には実際に読み込めたサイズが返ってきます。
基本的には第三引数で指定したサイズがそのまま返ります。
第五引数は基本的にNULLで構いません。
※ファイルを読み込んだ後は読み込んだサイズ分だけファイルポインタ(読み込み位置)が進みます。
戻り値は成功か失敗かのBOOL値が返ってきます。
ファイルポインタの移動
ファイル操作時に読み込み位置を変えたい場合があります。
SetFilePointer(hFile, 32, NULL, FILE_BEGIN);
そんな時はSetFilePointerを使うと指定した位置に移動できます。
第二引数で移動する位置
※第三引数は移動する位置が32bitでおさまらない場合に上位の32bitとして扱えます。
第四引数でどこから移動するかを指定できます。
今回は先頭(FILE_BEGIN)から先に32byteを指定しています。
- FILE_BEGIN
先頭からの位置 - FILE_CURRENT
現在位置からの位置 - FILE_END
末尾からの位置
戻り値で移動後の位置がバイト単位で帰ってきます。
これを応用して下記のように記載すると現在の位置が取得できます。
DWORD dwCurrent = SetFilePointer(hFile, 0, NULL, FILE_CURRENT);
dwCurrent が現在のファイルポインタの位置になります。
ファイルを閉じる
ファイルを操作した後は閉じる必要があります。
CloseHandle(hFile);
ファイルを閉じるのは簡単でこれだけです。