カテゴリー
C言語

ファイルの操作について知ろう

この章ではC言語におけるファイルの取り扱い方法について学習します。
これまではprintf関数などを使って、文字列や計算結果を画面に出力していましたが、その処理が終われば、データは失われてしまいます。
そこで、そのようなデータはファイルに保存しておけば後で確認したい時に便利です。
C言語におけるファイルの取り扱いの流れを説明します。
(1) ファイルをオープンします
(2)ファイルの読み書きをします
(3)ファイルをクローズします
この順序でファイルを操作を行います。
では例をみてみましょう。11 ではファイルをオープンする手順について説明します。
初めに以下の構文でファイル構造体のポインタを作ります。1この例では以下の箇所です。1 ファイル構造体はファイルに関する入出力などの機能を備えています。
次に操作したいファイルを以下の構文でオープンします。1 fopen関数を実行すると、ファイル情報を持つFILE型のポインタ(ファイルポインタといいます)が返されます。
そして、このfopen関数をファイル構造体の変数に代入します。1 オープンモードではファイルをどのような状態で開きたいのかを設定します。
この例ではwを使っていますが、このモードを使うとファイルの中身を上書きして、ファイルが無い時は新規作成してくれます。
wモードであればこの例の「net.txt」と言うファイルが自身のフォルダに無くても、自動的に作ってくれます。次の表を参考にしてください。11
次にファイルを読み書きする方法について説明します。
ファイルに書き込むにはfprintf関数を使います。
fprintf関数はファイルポインタで指定したファイルに変換指定文字を使ってデータを書き込みます。1 この例では以下の箇所でdouble型のiのデータを変換指定文字である1の通りにファイルに書き込んでいます。1
次はファイルをクローズする方法について説明します。
ファイルを開いた後には閉じなくてはいけません。
その時に使うのがfclose関数です。1

次は以下の箇所の説明します。1 NULLと言う見慣れない文字がありますが、ファイルが何らかの理由でオープンできなかった時にfopen関数がこのNULLを返します。1 exit関数を使用する時には1の記述が必要です。
結果は「net.txt」に変数iの値である8.1が書き込まれます。1

次の例ではscanfで読み込んだデータをファイルに書き込みます。11
while文の中にEOFという箇所がありますが、これはキーボードで1を押すと返される値です。
EOFの前に「!」が付いているので、1を押さない間は入力する行為を繰り返すという意味になります。1 気を付けることは以下の箇所で「-6」という箇所がありますが、マイナス指定をするとファイルの中のデータを左詰めにするという意味になります。ファイルに書き込むときには左詰めで入力するのが基本です。1 左詰めでファイルにデータを入れているので、「net.txt」は以下のようになります。1 次は「net.txt」に書き込んだデータを取り出してみましょう。111 ファイルからデータを読み込むにはfscanf関数を使用します。1 このfscanf関数は書式指定文字に従ってデータを取り出します。
この例では以下の箇所です(スペースの都合でwhileの条件式を2行で書いていますが、1行で書いてもいいです)。1 ここでEOFが出てきますが、1の意味はファイルの終端までデータを読み込むと言う意味になります。
fscanf関数はファイルの終端になるとEOFを返します。
読み込む時にはfopen関数のオープンモードはrになります。1
次の例はfputs関数でデータをファイルに書き込む方法について説明します。11 fputs関数はファイルポインタで指定したファイルへ1行ずつ文字列を書き込みます。1 fputs関数はファイルに1行分書き込む関数です。
結果は以下の通り、ファイルに書き込まれます。1 注意点としては以下のように改行を入れないと1行でファイルに書き込まれるので気を付けてください。
もちろん、初めから1行で書き込む意図があるのならば1は入れる必要はありません。1 結果は以下の通りです。1

次の例は「net.txt」に書き込んだテキストファイルから指定した文字サイズだけを読み込むプログラムです。11 ファイルから指定した文字サイズを読み込むにはfgets関数が必要です。1 fgetsはファイルポインタで指定したファイルから、指定した文字の数だけを読み込んで、配列に代入します。
そして、読み取るものが無くなるとNULLを返すので、NULLになったらwhile文を終了します。
読み取るときには1のように読み取りモードをrに指定してください。1
次の例は「net.txt」から1文字ずつ読み込むプログラムです。11 fgetc関数はファイルポインタで指定したファイルから1文字読み取ります。11 ここでは読み込んだ1文字をchar型の変数に入れてputcharで1文字ずつ出力しています。
fgetcは読み込みに成功すると、その読み込んだ1文字を返し、ファイルの終わりまで読んだ場合は、EOFを返します。111