ログイン
kid's world

バイナリファイルを扱う

バイナリファイルを扱う

ファイルには大きく分けて,テキストファイルとバイナリファイルがある。これまで解説してきたのは,テキストファイルの扱い方である。

ここからは,バイナリファイルの扱い方について解説しよう。

テキストファイルとは,エディタなどで閲覧/編集することのできる,主に文字から構成されるファイルのことである。実際には,文字に対応づけられた数値(文字コード)が書き込まれている。これに対して,バイナリファイルはそのような文字コードの範囲にこだわらず,バイトを基本単位として扱うファイルのことである。プログラム上では,int型変数やfloat型変数などのデータはバイトを基本単位としているため,そのままの形式でバイナリファイルに書き込むことができる。

バイナリファイルを開くには,テキストファイルと同様に,fopen関数を使うが,第2引数に指定する文字列には,バイナリを意味する「b」を追加する。たとえば新しいファイルを作成して開きたい場合は"wb",既存のファイルを開きたい場合は"rb"となる。もちろんファイルを開き,使い終わったら閉じることを忘れてはならない。これもテキストファイルの場合と同様にfclose関数を使う。

バイナリデータを書き込むには,fwrite関数を使う。この関数には引数として,先頭から「ポインタ」,「サイズ」,「個数」,「ファイルポインタ」の4つを順に与える。「ポインタ」には書き込むデータを指しているポインタを指定し,そこから書き込むべきバイト数を「サイズ」で指定する。すると,「ファイルポインタ」に関連づけられたファイルへと書き込まれる。残った「個数」は指定されたデータを書き込む回数を表していて,通常は1を指定する。

ご存じのように,変数がメモリ上で使っているバイト数はその型によって異なる。以前に解説したように,型のサイズはsizeof演算子で知ることができるので,たとえばint型のバイト数は,

sizeof(int)

で知ることができる。たとえばint型変数iのデータをバイナリファイルに書き込むには,

fwrite(&i, sizeof(int), 1, fp);

とする。この関数の戻り値は,正常に書き込まれたデータの数である。したがって上記の例では戻り値が1ではないときは正常に書き込めていないので,エラー処理を行わなければならない。

それに対して,バイナリファイルからデータを読み込むには,fread関数を使う。引数はfwrite関数と同じだ。したがって,バイナリファイルからint型変数iにデータを読み込むには,

fread(&i, sizeof(int), 1, fp);

とする。戻り値もfwrite関数と同様である。もしファイルの終端まで読み込んだ場合は,feof関数が0ではない値,つまり「真」を返す。引数にはファイルポインタを与える。否定を表す論理演算子「!」を使って,

while(!feof(fp) {
  fread(...);
  ...
}

というような書き方ができる。


ファイルを扱う具体例」へ進む

広告


©Toshio Koide 1996-2007.

目次

リンクについて

リンクは御自由にどうぞ。

メール

mail.gif

広告