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