シリアライズ第4回〜バイナリ形式による保存&読み込み part.2〜


目次に戻る


fread、fwrite関数を使うと int や char 等の変数以外にも構造体データをそのまま保存する事ができます。
構造体をファイルに保存する方法
/*
 * c:\work\data3.bin というファイルに変数の値が保存されます。
 */
#include <stdio.h>

#define FILENAME    "c:\\work\\data3.bin"

/* 構造体の定義 */
typedef struct tagTTestStruct
{
    int data1;
    int data2;
    char data3;
} TTestStruct;

/* メイン関数 */
int main()
{
    TTestStruct testdata = { 10 , 20 , 30 };
    FILE *fp;   /* ファイル処理で使用する */

    /* ファイルを書き込み用バイナリ形式で開く。エラー処理は省略 */
    fp = fopen( FILENAME , "wb" );

    /* 構造体データをファイルに出力 */
    fwrite( &testdata , sizeof( testdata ) , 1 , fp );

    /* ファイルを閉じる */
    fclose( fp );

    return 0;
}

ファイルからデータを読みとり構造体変数に代入する方法
/*
 * c:\work\data3.bin というファイルから読み込みます。エラー処理をしていないので注意
 */
#include <stdio.h>

#define FILENAME    "c:\\work\\data3.bin"

/* 構造体の定義 */
typedef struct tagTTestStruct
{
    int data1;
    int data2;
    char data3;
} TTestStruct;

/* メイン関数 */
int main()
{
    TTestStruct testdata;
    FILE *fp;   /* ファイル処理で使用する */

    /* ファイルを読み込み用バイナリ形式で開く。エラー処理は省略 */
    fp = fopen( FILENAME , "rb" );

    /* ファイルからデータを読み込み構造体変数に代入 */
    fread( &testdata , sizeof( testdata ) , 1 , fp );

    /* ファイルを閉じる */
    fclose( fp );

    /* 読み込んだ内容を画面に表示 */
    printf( "data1 = %d , data2 = %d , data3 = %d\n"
        ,testdata.data1,testdata.data2,testdata.data3 );

    return 0;
}

 
構造体の変数をfread,fwriteを使いそのまま読み書きするのには注意点がいくつかあります。

目次に戻る