流的重定向 收藏
在我的一项开发工作中,我要用到 Duan写的程序,我直接把他那个程序的代码原封不动的包含到我的程序中。
Duan的程序的输出是直接输出到标准输出也就是屏幕上的,而我的程序的输出是到 log文件里的。假如我直接去改动他的代码,那就会带来很多麻烦,在这种情况下,最简单的方法就是把标准输出流重新定向到文件中。
我采用替换流缓冲区的方法来重定向流,用 rdbuf函数拿一个文件流的缓冲区去替换 cout的缓冲区,这样送到 cout缓冲区的数据都会被送到这个文件中,等到程序结束时,再改回原来的流缓冲区。
#include
#include
int main()
{
std::ofstream log(" foo . log ");
std::streambuf * old buf = std::cout.rdbuf(log.rdbuf());
std::cout << " 输出到标准输出,但实际输出到了 foo.log文件中 /n";
log << "输出到文件,虽然将 cout重定向到了 log,但不影响 log本身的使用 /n";
// 恢复流缓冲区
std::cout.rdbuf( old buf);
}
注意:
1. cout可以调用 rdbuf来替换缓冲区,但 log不能通过调用 rdbuf来替换缓冲区。因为 ofstream的 rdbuf并没有同样的功能。
2.对流的重定向,只是作用在一个代码块内 {},出了这个 {},就恢复为原来的了,但是对在这个代码块内调用的函数,重定向也会生效。
在窗口应用中使用printf,cout 等将输出重定向到console收藏 http://blog.youkuaiyun.com/royer/archive/2007/01/25/1492968.aspx 收藏
AllocConsole();


















