第26章 ファイル入出力


ファイルの入出力をします。オブジェクトを使うと 驚くほど簡単に入出力ができます。 まずは、ファイルへの出力について考えます。 あらかじめ定義されているクラスにofstreamクラスがあります。 このクラスのオブジェクトを生成すればよいのです。 このクラスのコンストラクタをヘルプで見てみましょう。

#include <fstream.h> ofstream( ); ofstream( const char* szName, int nMode = ios::out, int nProt = filebuf::openprot ); ofstream( filedesc fd ); ofstream( filedesc fd, char* pch, int nLength );

コンストラクタが、オーバーロードされていますね。 最初のコンストラクタは、オブジェクトを生成するだけです。 2番目のコンストラクタは、出力するファイル名を引数にとれます。 後の引数は、デフォルト引数で省略するとios::out, filebuf::openprot が使われます。ios::outは、ファイルを出力用にオープン、filebuf::openprot は、デフォルトモードという意味です。 ともかく、ofstreamクラスのオブジェクトをファイル名付きで生成すると そのファイルを出力用に使えます。さっそく例題を見てみましょう。

これは、簡単ですね。ところで、プログラムの終了時に 書き込みをしたファイルはcloseしなくていいの?という 疑問がありませんか。じつは、オブジェクトの消滅時に デストラクタが自動的にクローズしてくれるので 大丈夫です。

結果は、左の通りです。エジタで、text.txt を開いて本当にこの文字列が書き込まれているか 調べてみて下さい。

つぎは、ファイルからの読み出しですが だいたい想像がつきますね。では、先ほど作った text.txtを読み出すプログラムを作ってみましょう。 今度はifstreamクラスを使います。

#include <iostream.h> #include <fstream.h> int main(void) { char c; char file_name[32]; int i = 0; cout << "ファイル名==>"; cin >> file_name; ifstream MyFile(file_name); while(MyFile.get(c)) cout << c; return 0; }

今度のは、ファイル名をユーザーが入力するように なっています。もし、存在しないファイル名を 入力したらどうなるのでしょうか。実は、そのファイルを 作ってしまいます。もちろん中身はありません。 getというメンバ関数は、istreamクラスのメンバです。 ヘルプでオーバーロードの様子を見て下さい。 vcでは、2バイトの文字を読み出しても大丈夫です。

結果は左の通りです。


[C++Index] [総合Index] [Previous Chapter] [Next Chapter]

Update Feb/12/1997 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。