最後にバイナリファイルの読み込み操作を見ていきます。
読み込み処理の例題
この例題では
asset/data.bin を開き10個の整数値を読み込んでいく
という事を行います。
大まかな手順は下記のとおりです。
- fopen_s 関数で指定したファイルを指定したモードで開き、変数fpで操作できるようにする
- fread 関数で指定した型のサイズを指定した個数分読み込んで、コンソールに表示する
- fclose 関数でファイルを閉じる
#include
// エントリー関数
int main(void)
{
// ファイル構造体を扱うポインタ変数宣言
FILE* fp = NULL;
// バイナリデータを読み込む為、 モードに「b」を付け加える
if (0 == fopen_s(&fp, "asset/data.bin", "rb"))
{
// int 型の整数値を10個読み込む
int data[10] = { };
fread(data, sizeof(int), 10, fp);
// 読み込んだ内容をコンソールに表示する
for (int i = 0; i < 10; ++i)
{
printf("%d ", data[i]);
}
fclose(fp);
}
else
{
printf("ファイルがありません");
}
return 0;
}
順にみていきましょう。
①fopen_s 関数で指定したファイルを指定したモードで開き、変数fpで操作できるようにする
下記コードがその個所となります。
// ファイル構造体を扱うポインタ変数宣言
FILE* fp = NULL;
// バイナリデータを読み込む為、 モードに「b」を付け加える
if (0 == fopen_s(&fp, "asset/data.bin", "rb"))
バイナリデータを読み込む為、モードが「rb」になっている事に注目してください。
②fread 関数で指定した型のサイズを指定した個数分読み込んで、コンソールに表示する
下記コードがその個所となります。
// int 型の整数値を10個読み込む
int data[10] = { };
fread(data, sizeof(int), 10, fp);
// 読み込んだ内容をコンソールに表示する
for (int i = 0; i < 10; ++i)
{
printf("%d ", data[i]);
}
fread 関数で読み込みたいデータの単体のデータサイズと個数を指定して、格納先の変数に設定していきます。
読み込みの開始位置は、変数fpで制御されており、
読み取りが行われると、読み取った分だけ開始位置を進めてくれます。
バイナリデータである為、読み込まれたデータが何を意味するのかは、
そのバイナリデータを作成した(書き込んだ)人にしか理解できない内容になっています。
テキストファイルのフォーマット指定読み込みと同じく、
データフォーマット(「何バイト目から何バイト分が何の情報を指すのか」等)を
理解して利用しなければならない事に注意してください。
戻り値は読み込んだデータの個数となっています。
③ fclose 関数でファイルを閉じる
下記コードがその個所となります。
fclose(fp);
ファイルは使い終わると必ず fclose で閉じるようにしてください。