ファイヤープロジェクト
ファイル入出力ストリーム
2006-10-15T21:50+09:00   matsu
ファイル入出力ストリームを使用して,ファイル入出力をプログラミングする方法を調べてみた.
ファイルへの入出力には,ファイルストリームをオープンして,使用する. ストリームは,入力/出力,ストリーム対象(ファイルか文字列=メモリか)によって,いくつかの種類がある. ファイルストリームは,対象がファイルであるストリームであり,入力と出力,および入出力の三種類がある. 入力ファイルストリームはifstreamである.
ifstream(String file, openmode mode)
出力ファイルストリームはofstreamである.
ofstream(String file, openmode mode)
そして入出力ファイルストリームはfstreamである.
fstream(String file, openmode mode)
テンプレートのクラス図は以下のようになる.
openmodeによって,そのストリームのモード(読み込み,書き込みなど)が決まる. 以下に各モードについて記述する.
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;
  }
matsu(C)
Since 2002
Mail to matsu