ファイル操作

   1.3 何という名前のファイルから読み込むのか(または書き込むのか)を指定する(fopen, fclose)
  この処理は,結局1.2で説明したファイルポインタと実際のファイルとを結び付けるという処理になります。例えば,seiseki.datというファイルに成績データが格納してあって,このファイルを読み込むためにファイルポインタと結び付けるには,fopenという関数を使って,次のように書きます。

      fp = fopen("seiseki.dat","r");

ただし,fpというのはファイルポインタ名とします。

 fopenは2つの文字列からなるパラメータを持ちます。最初のパラメータはファイルの名前を指定する文字列です。

 2つ目のパラメータは,そのファイルを読み込み用に指定するのか,書き込み用に指定するのかといったファイルに対する処理方法を指定するのに使う文字列です。このパラメータの指定方法を表8.1に示します。

表8.1 fopenの主な処理方法指定

パラメータ文字

説明

r

そのファイルからデータを読み込む。ファイルが存在しなければエラーになる。rはreadの頭文字を意味する。

w

そのファイルにデータを書き込む。ファイルが存在しなければ新規に作成され,存在していれば前のファイルは消去されて改めて作成される。wはwriteの頭文字を意味する。

<

a

そのファイルにデータを追加書き込みする。ファイルが存在しなければ新規に作成される。存在していればそのファイルの最後にデータが追加して書き込まれる。aはappendの頭文字を意味する。

 fopenという関数の戻り値をファイルポインタに代入してやると,以後はこのファイルはファイルポインタを通して処理されます。

 読み込み用にファイルを使用するときには,当たり前ですが既にこのファイルが存在している必要があります。もし存在しない場合はエラーとなり,ファイルポインタにNULLという値(通常は0)が入ります。ですから,例えば次のようにしてエラーのチェックを行う必要があります。

     fp = fopen("seiseki.dat","r");
     if(fp == NULL)
     {
          printf("File not found!\n");
          exit(1);
     }

 なお,exit(1)というのは,プログラムを終了する命令です。

 fopen関数を用いてファイルポインタと結び付けられたファイルに対する処理がすべて終わったら,最後にファイルポインタとの結びつきを開放してあげる必要があります。それを行うのはfclose関数です。fclose関数は,入力パラメータとして現在何かのファイルに結び付けられているファイルポインタを指定します。すると,そのファイルとの結びつきは開放され,このファイルポインタはまたfopen関数を用いて別のファイルと結び付けることが出来ます。

 例えば、ファイルポインタfpとの結びつきを開放する場合には、次のようにします。

     fclose(fp);

 プログラム中でfopenを使った時は、必ずこのfcloseを忘れないでください。このfcloseを忘れると、ファイルが破損しデータが失われてしまう場合があります。