コンストラクタが、オーバーロードされていますね。 最初のコンストラクタは、オブジェクトを生成するだけです。 2番目のコンストラクタは、出力するファイル名を引数にとれます。 後の引数は、デフォルト引数で省略するとios::out, filebuf::openprot が使われます。ios::outは、ファイルを出力用にオープン、filebuf::openprot は、デフォルトモードという意味です。 ともかく、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 );
これは、簡単ですね。ところで、プログラムの終了時に
書き込みをしたファイルはcloseしなくていいの?という
疑問がありませんか。じつは、オブジェクトの消滅時に
デストラクタが自動的にクローズしてくれるので
大丈夫です。
結果は、左の通りです。エジタで、text.txt
を開いて本当にこの文字列が書き込まれているか
調べてみて下さい。
つぎは、ファイルからの読み出しですが だいたい想像がつきますね。では、先ほど作った text.txtを読み出すプログラムを作ってみましょう。 今度はifstreamクラスを使います。
今度のは、ファイル名をユーザーが入力するように なっています。もし、存在しないファイル名を 入力したらどうなるのでしょうか。実は、そのファイルを 作ってしまいます。もちろん中身はありません。 getというメンバ関数は、istreamクラスのメンバです。 ヘルプでオーバーロードの様子を見て下さい。 vcでは、2バイトの文字を読み出しても大丈夫です。#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; }
結果は左の通りです。
Update Feb/12/1997 By Y.Kumei