在重定向到文件后,使用cout或cerr将其输出到控制台
Use cout or cerr to output to console after it has been redirected to file
将cout或cerr重定向到文件很容易。我可以使用它将第三方输出重定向到文件。但是,在我将第三方输出重定向到一个文件之后,我自己如何使用cout来输出到控制台呢?
我是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;
保存缓冲区并稍后恢复:
std::streambuf *buf = std::cout.rdbuf(); //save
// Do other stuff
std::cout.rdbuf(buf); // restore
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么我的代码在输出中增加了93天
- 如何从void函数输出字符串
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- AES加密到解密未正确输出
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- C++格式化输出问题
- cout 和 cerr 的控制台输出顺序错误
- 将调试输出重定向到空流而不是 std::cerr
- 为什么cerr输出比cout快
- 输出到stdout和带有cout、cerr、clog甚至用户定义的ostream的文件
- 在BOOST_CHECK_EQUAL期间隐藏cerr输出
- 在重定向到文件后,使用cout或cerr将其输出到控制台