C言語では、ファイルからデータを入出力することができます。
ただし、いきなりファイルからデータを読み込んだり、書き込んだりすることはできません。
ファイルからデータを入出力するには、ファイル入出力の手続きが必要です。
そこで今回のC言語超入門では、ファイルからの入出力をするための手続きである、
オープン処理とクローズ処理について解説をしていきます。
なお、ファイルから1文字を入出力する方法についてはC言語超入門(第40回)、ファイルから文字列を入出力する方法については C言語超入門(第41回)を参照くださいませ。

ファイル処理の手順

ファイルを入出力するための処理は、大まかに以下の流れになります。

  1. ファイルのオープン
  2. ファイルの読み込み/書き込み
  3. ファイルのクローズ

ファイルのオープン処理では、読み書きをしたいファイル名を指定して、そのファイルを操作するための識別子(ファイルポインタ)を取得します。
以後、このファイルポインタを使って、ファイルの読み書きを行います。
ファイルの入出力処理が終わったら、ファイルのクローズ処理を行い、ファイルポインタを解放します。

ファイルのオープンに失敗したとき

C言語では、ファイルのオープン処理に失敗したとき(例えば、指定したファイルが存在しない、など)、自動でエラー処理は行われません。
ファイルのオープンに失敗した場合の処理は、プログラマーが用意する必要があります。
ファイルのエラー処理を正しく行いませんと、ファイルを破壊する可能性もありますから、十分に気を配ってプログラミングをしてくださいませ。

ファイルオープン、クローズを行う関数

ファイルをオープンするにはfopen()関数、クローズするにはfclose()関数を使います。
以下にfopen()関数とfclose()関数の使い方について、ポイントを絞ってご説明いたします。

fopen()関数

書式:

FILE *fopen(char *FileName, char *Mode)

FileNameで指定したファイルを、Modeで指定したファイルモードでオープンします。
ファイルモードには、以下があります。
・ “r” ・・・ ファイル読み込み(ファイルがないときはエラーになる)
・ “w” ・・・ ファイル書き込み(ファイルが存在するときはファイルサイズが0になり、存在しなければ新規に作成される)
・ “a” ・・・ ファイルの最後に追加(ファイルが存在しなければ新規に作成される)
※バイナリファイルの読み書きをする場合は、”rb”、”wb”、”ab”にする
fopen関数は、ファイルが正常にオープンできたならファイルポインタを、失敗したとき(エラーのとき)はNULLを返します。
ファイルの読み書きは、すべてfopen関数で取得したファイルポインタを使って行います。

fclose()関数

書式:

int fclose(FILE *fp)

fopen()関数でオープンしたファイルの利用が終わったら、fclose()関数を使ってクローズします。
ファイルのクローズ処理に失敗したとき、fclose()関数はEOFを返します。

C言語超入門の第39回まとめ

さて今回のC言語超入門では、ファイルからの入出力をするための手続きである、
オープン処理とクローズ処理について解説してきましたが、いかがでしたでしょうか。
ファイルから入出力する方法のうち、ファイル入出力の基本となるファイルオープン処理とクローズ処理について、もう一度、整理しておきます。
・ ファイルからデータを入出力するには、ファイルのオープン処理・クローズ処理が必要
・ ファイルへの入出力は、ファイルのオープン処理で取得したファイル識別子を使う
・ ファイルのオープンに失敗したときは、プログラマーがエラー処理を記述しなければならない
なお、ファイルから1文字を入出力する方法についてはC言語超入門(第40回)、ファイルから文字列を入出力する方法については C言語超入門(第41回)を参照くださいませ。
ステップ・バイ・ステップ。焦らず一歩ずつ進んでいきましょう。