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;
}

バイナリーファイルはデータサイズやバイト順などに依存する場合がある。システム間で交換するときは注意する。