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を定義していますが、これは要素一つのサイズで全体のサイズを割ったものになります。