cout または cerr をファイルにリダイレクトするのは簡単です。これを使用して、サードパーティの出力をファイルにリダイレクトできます。ただし、サード パーティの出力をファイルにリダイレクトした後、自分で cout を使用してコンソールに出力するにはどうすればよいですか?
質問する
1463 次
2 に答える
4
私は RAII の大ファンなので、この小さなヘルパー クラスを作成したことがあります。ストリームがスコープ外になるまでリダイレクトし、その時点で元のバッファを復元します。とても便利です。:)
class StreamRedirector {
public:
explicit StreamRedirector(std::ios& stream, std::streambuf* newBuf) :
savedBuf_(stream.rdbuf()), stream_(stream)
{
stream_.rdbuf(newBuf);
}
~StreamRedirector() {
stream_.rdbuf(savedBuf_);
}
private:
std::streambuf* savedBuf_;
std::ios& stream_;
};
次のように使用できます。
using namespace std;
cout << "Hello stdout" << endl;
{
ofstream logFile("log.txt");
StreamRedirector redirect(cout, logFile.rdbuf());
cout << "In log file" << endl;
}
cout << "Back to stdout" << endl;
于 2013-01-11T23:03:37.237 に答える
4
バッファーを保存し、後で復元します。
std::streambuf *buf = std::cout.rdbuf(); //save
// Do other stuff
std::cout.rdbuf(buf); // restore
于 2013-01-11T22:37:32.733 に答える