ファイル入出力ストリーム
ファイル入出力ストリームを使用して,ファイル入出力をプログラミングする方法を調べてみた.
ファイルへの入出力には,ファイルストリームをオープンして,使用する.
ストリームは,入力/出力,ストリーム対象(ファイルか文字列=メモリか)によって,いくつかの種類がある.
ファイルストリームは,対象がファイルであるストリームであり,入力と出力,および入出力の三種類がある.
入力ファイルストリームはifstreamである.
openmodeによって,そのストリームのモード(読み込み,書き込みなど)が決まる.
以下に各モードについて記述する.
ファイルを開いて,書き出すだけのものである.
ファイルの有無チェックについてだけ,次節にちょっと書いておく.
ifstream(String file, openmode mode)出力ファイルストリームはofstreamである.
ofstream(String file, openmode mode)そして入出力ファイルストリームはfstreamである.
fstream(String file, openmode mode)テンプレートのクラス図は以下のようになる.
- app
- 追記モード. bits/ios_base.hによると,書き込みの度にファイル末尾をシークするらしい.
- ate
- オープン後即ファイル末尾に移動.
- binary
- バイナリモードでオープン. バイナリデータの入出力は,これを指定するだけではできない. 別頁にて記述.
- in
- デフォルト. 読み取りモードでオープン. ifstreamとfstreamのデフォルト.
- out
- デフォルト. 書き出しモードでオープン. ofstreamとfstreamのデフォルト.
- trunc
- デフォルト. 上書きモードでオープン. ofstreamのデフォルト.
ファイル有無のチェックは,ifstreamにてオープンを試み,成功すればあり,失敗すればなし(あるいは権限がない)と判定する.
ストリームオープン失敗時は,ifstreamのコンストラクタ返り値がnullとなっている.
ifstream *ifs = new ifstream(OUTPUT_FILE, ios::in);
if (!*ifs) {
cerr << __FILE__ "(" << __LINE__ << ") Error: " OUTPUT_FILE " does not exist." << endl;
cout << "continue..." << endl;
}

