第51章 ファイルのススメ

 今回から数回にわたって、ファイルの扱い方について話していきたいと思います。先ず、今回はその事始めに、ファイルについていくつか説明したいと思います。

 また、ファイルについては少し第31章でも触れました。こちらも参考にして下さい。


 では、今回の要点です。


 では、いってみましょう。


 さて、ファイルとは何なのでしょうか? ファイルとはディスク上にあるデータを整理、管理したものです。

 ディスク上にはデータがときにバラバラに、ときにまとまって存在しています。それらの位置をOSが管理しています。ファイルには主データの他に、OSから名前や更新日時などの情報が与えられています。このように、ただのデータをOSがユーザーに分かりやすいようにしたもの、それがファイルです。

 ファイルはディスク上に存在しています。つまりメモリ上ではありません。なので、その内容を利用するには、メモリに読み込んだり、メモリから書き出したりする必要があります

 なんか難しいような気がしますが、ファイルを利用するのはとても簡単です。stdio.h にはファイルを扱う便利な関数がいろいろ入っています。fstream.h には、cout, cin と同じ感覚で使える fstream というものもあります。ここではいろいろ小回りの利く stdio.h の関数を使ってファイルを扱うことにします。


 さて、先ずは簡単なプログラムから見ていきましょう。では、下のプログラムを先ず見て下さい。

プログラム
// File1.cpp
#include <stdio.h>

int main()
{
    FILE* pFile;

    pFile = fopen("test.txt", "w");
    fputs("ファイルに書き込んじゃえ。", pFile);
    fclose(pFile);

    return 0;
}
test.txt の中身
ファイルに書き込んじゃえ。

 非常に簡単です。これだけで「ファイルに書き込んじゃえ」という文字列がファイルに書き込まれました。

 では、関数の説明をしていきましょう。

 fopen は、ファイルを「開く」関数です。ファイルを使うには、先ずファイルを「開き」ます。

 ファイル名とフラグを関数に渡し、OSに「ファイルを使わせて下さい」と頼みます。もしファイルがなければ、フラグによってはファイルを作り、フラグによってはエラーになります。そして、ファイルが使えない状態にあっても、エラーになります。そして、エラーが出なかったとき、ファイルはこのプログラムで使える状態になり、「開かれた」ことになります。ここでのフラグは「ファイルに書き込む」というフラグです。フラグについてはおいおい話していきます。

 ファイルが正常に開かれると、FILE* 型の値を返します。FILE は構造体というもので、後の機会に話すつもりです。ファイルが開けなかった場合は、NULL を返します。NULL はマクロで、普通は 0 に置き換えられます。通常はポインタに対して使います。ポインタに NULL が入っている場合、参照しようとすると必ずエラーになるので、NULL はエラーや未使用などの目印として使われます。ここではエラー処理は割愛しています。

 FILE 構造体へのポインタを返すわけですが、あまりそのことにこだわる必要はなく、ただの管理キーのように思ってもらって結構です。ただ、

FILE* pFile1, pFile2;

のようにしてしまうと、pFile2 がポインタにならない、というところは注意して下さい。

FILE *pFile1, *pFile2;

とするか、宣言を2つに分けるかして下さい。

 fputs文字列をファイルに書き込む関数です。文字列と FILE 構造体へのポインタを指定するだけで、ファイルに書き込むことが出来ます。文字列はメモリ上にあるデータで、それをファイルに書き込む関数が fputs な訳です。

 fclose はファイルを「閉じる」関数です。そう、「開けたら閉める」のはこの世の常識です。でも、閉じ忘れていても、実はプログラムが終わるときに勝手に閉じてくれます。ただ、ファイルの開きすぎはエラーになることもあり、いらなくなったら閉じるのがルールとなっています。

 以上がファイルへ文字列を書き込む方法です。


 ファイルにはただの文字列以外にも、fprintf を使って、書式化された文字列を書き込むことが出来ます。ほかにも、書式化文字列でなく、メモリにあるデータの「生の」形で書き込むこともできます。

 また、もちろん読み出すことも出来ます。読み出す方が少し厄介な制限があったりするのですが、基本的には簡単です。

 これらのことは次回から順を追って話していきたいと思います。


 それでは今回の要点です。


 では、次の章まで、さようなら。


第50章 命名法 | 第52章 ファイルのススメ2

Last update was done on 2000.7.4

この講座の著作権はロベールが保有しています