2009年5月26日火曜日

C++: ストリームの出力先をファイルや標準出力に切り替える

このブログ記事をはてなブックマークに追加

C++のストリームの出力先を任意にファイルや標準出力に切り替えたいときがたまにある。しかし、その度に標準出力ストリームやファイルストリームを定義し直して使うのは面倒だし、効率が悪い。

そんな時は、以下のコードで示す方法で切り替えると楽だ。2~3行で変更できる。さらに、ostreamのポインタでストリームを保持しておけば動的な切り替えも簡単だ。

以下、ソースコード。

#include <iostream> #include <fstream> using namespace std; int main() { // coutの出力バッファをofstreamのバッファに変更する方法. // 最後にcoutの出力バッファを元に戻すこと. streambuf* last = cout.rdbuf(); ofstream ofs("test01.txt", ios_base::out); cout.rdbuf(ofs.rdbuf()); cout << "test01 to file" << endl; ofs.close(); cout.rdbuf(last); // ostreamのインスタンス作成時にストリームの出力バッファを指定する方法. ofs.open("test02.txt", ios_base::out); ostream out1(cout.rdbuf()); ostream out2(ofs.rdbuf()); out1 << "test02 to stdout" << endl; out2 << "test02 to file" << endl; ofs.close(); // ostreamのポインタを使ってnewでインスタンスを作成する方法. // これなら必要時に動的にストリームを変更できる. ostream* o; o = new iostream(cout.rdbuf()); *o << "test03 to stdout" << endl; delete o; o = new ofstream("test03.txt", ios_base::out); *o << "test03 to file" << endl; delete o; return 0; }

0 コメント: