今回から数回にわたって、ファイルの扱い方について話していきたいと思います。先ず、今回はその事始めに、ファイルについていくつか説明したいと思います。
また、ファイルについては少し第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 を使って、書式化された文字列を書き込むことが出来ます。ほかにも、書式化文字列でなく、メモリにあるデータの「生の」形で書き込むこともできます。
また、もちろん読み出すことも出来ます。読み出す方が少し厄介な制限があったりするのですが、基本的には簡単です。
これらのことは次回から順を追って話していきたいと思います。
それでは今回の要点です。
では、次の章まで、さようなら。
Last update was done on 2000.7.4
この講座の著作権はロベールが保有しています