C 言語 | 高度な機能 | バイナリーファイル - fwrite(), fread()
標準 C 関数を使って、生のバイナリーデータを読み書きする方法を説明する。
生データ
fprintf() や fscanf() などのテキスト関数は、値とテキストを変換する。バイナリーファイルはメモリー上のデータを直接保存するため、配列や構造体に便利である。
バイナリーデータの書き込みには fwrite() を使う。
size_t fwrite(const void *buffer, size_t size, size_t count, FILE *stream);
buffer はデータへのポインター、size は各要素のサイズ、count は要素数、stream は出力先である。戻り値は実際に書き込んだ要素数である。
バイナリー出力ファイルは "wb" などのモードで開く。
コード 1
#include <stdio.h>
typedef struct { int left, top, right, bottom; } RECT;
int main() {
RECT rect = { 10, 20, 30, 40 };
FILE *file = fopen("rect.dat", "wb");
if (file == NULL) return 1;
fwrite(&rect, sizeof(RECT), 1, file);
fclose(file);
return 0;
}
バイナリーデータの読み込みには fread() を使う。
size_t fread(void *buffer, size_t size, size_t count, FILE *stream);
バイナリー入力ファイルは "rb" で開く。出力先のバッファーには十分な領域が必要である。
コード 2
#include <stdio.h>
typedef struct { int left, top, right, bottom; } RECT;
int main() {
RECT rect;
FILE *file = fopen("rect.dat", "rb");
if (file == NULL) return 1;
fread(&rect, sizeof(RECT), 1, file);
fclose(file);
printf("%d %d %d %d\n", rect.left, rect.top, rect.right, rect.bottom);
return 0;
}
バイナリーファイルはデータサイズやバイト順などに依存する場合がある。システム間で交換するときは注意する。