【課題5−4 テキストファイルとバイナリファイル】

 

<テキストファイル>

文字列でデータを管理しているファイル.たとえば"10000"という数値を,fprintfをつかって%d書式指定でテキストファイルに書き出すと,'1', '0', '0', '0', '0'という文字に対応する文字コード(数値では0x31, 0x30, 0x30, 0x30, 0x30)が書き込まれる.テキストエディタでファイル内容が確認できる反面,ファイルサイズが大きくなってしまう.

 

<バイナリファイル>

数値データをそのまま管理しているファイル.fwrite関数を使って"10000"という数値を2バイトint型で書き出すと,0x2710という2バイトのデータが囲まれる.ファイルサイズが小さくてすむ反面,テキストエディタで内容が読めない.

 

fwrite関数:ブロック単位の書き込み

形式: 

 size_t fwrite(const void *buf, size_t size, size_t n, FILE *fp);

機能: bufから,fpが指すファイルへ,sizeバイトのデータをn個書き込む.ファイル位置指示子を書き込んだデータバイト分進める.

返値: 正常時:書き込んだデータ個数(バイト数ではない)

       異常時:nより小さな値.

 

fread関数:ブロック単位の読み込み

形式

 size_t fread(void *buf, size_t size, size_t n, FILE *fp);

機能: fpが指すファイルから,sizeバイトのデータをn個読み込み,bufに格納する.ファイル位置指示子を読み込んだデータバイト分進める.

返値: 正常時:読み込んだデータ個数(バイト数ではない)

       異常時:nより小さな値

 

<ファイルのランダムアクセス>

ファイル入出力関数は,先頭から順に読み書きを行う(シーケンシャルアクセス)のに便利なように,自動的にファイル位置指示子を進める.ファイル中の任意の場所にアクセスする場合(ランダムアクセス)には,fseek関数を使ってファイル位置指示子を動かす.

 

fseek関数:ファイル位置指示子のセット

形式: int fseek(FILE *fp, long offset, int origin);

機能: fpが指すファイルのファイル位置指示子を,originを基準としてoffsetバイト移動する.なお,fseek関数の呼び出し成功で,ファイル終了指示子をクリアする.

 origin:     SEEK_SET:ファイルの先頭

              SEEK_CUR:ファイル内の現在地

              SEEK_END:ファイルの終端

返値: 正常時:0

       異常時:非0

 

ftell関数:ファイル位置指示子の値を調べる

形式: long ftell(FILE *fp);

機能: fpが指すファイルのファイル位置指示子の値を返す.

返値: 正常値:ファイル位置

       異常時:-1L

 

 

戻る