C/C++

バイナリファイル入力

更新日:

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

-C/C++

Copyright© ツナのエンジニアブログ , 2025 All Rights Reserved Powered by AFFINGER5.