fread()
バイナリファイルの入力にはfread()関数を用います。
fread(【格納する配列】,【要素一つのサイズ】, 【要素数】, 【ファイルポインタ】);
と記述することで、ファイルポインタが示すファイルからデータを読み込みます。
また、書き込みに成功した要素数を返すので、それをエラー処理に用います。
サンプルコード
変数に読み込む場合のサンプルです。
bfile_in_sample1.c
FILE* fp; int errCheck; int inputData; fopen_s(fp, "bFile.dat", "wb"); if(fp == NULL){ printf("File Can't Open\n"); exit(1); } errCheck = fread(&a, sizeof(a), 1, fp); if(errCheck < 1){ printf("Read Error\n"); exit(1); } printf("%d\n", inputData); fclose(fp);
ファイル名の拡張子「.dat」とは、あまり見かけませんが、何かしらのデータが書かれているファイルであることを示します。
要素一つのサイズはsizeof()で値を求めています。
書き出しているデータ数が1なので戻り値が1より小さければエラーとしています。
次に配列に読み込む場合のサンプルです。
bfile_in_sample2.c
FILE* fp; int errCheck; char inputData[5]; int inputDataSize = sizeof(inputData)/sizeof(inputData[0]); fopen_s(fp, "bFile.dat", "wb"); if(fp == NULL){ printf("File Can't Open\n"); exit(1); } errCheck = fread(inputData, sizeof(inputData[0]), inputDataSize, fp); if(errCheck < inputDataSize){ printf("Read Error\n"); exit(1); } printf("%s\n", inputData); fclose(fp);
ファイルから4文字読み込み、文字列として表示しています。
配列名はアドレスを示すので、配列の場合は第一引数に「&」は必要ありません。
第二引数は要素一つ分のサイズなので、代表して0番目の要素の大きさを見ています。
データの個数としてoutputDataSizeを定義していますが、これは要素一つのサイズで全体のサイズを割ったものになります。