编程语言

img enoeht

流的重定向

发表于2004/6/23 11:41:00  1841人阅读

分类: C/C++

在我的一项开发工作中,我要用到Duan写的程序,我直接把他那个程序的代码原封不动的包含到我的程序中。

Duan的程序的输出是直接输出到标准输出也就是屏幕上的,而我的程序的输出是到log文件里的。假如我直接去改动他的代码,那就会带来很多麻烦,在这种情况下,最简单的方法就是把标准输出流重新定向到文件中。

我采用替换流缓冲区的方法来重定向流,用rdbuf函数拿一个文件流的缓冲区去替换cout的缓冲区,这样送到cout缓冲区的数据都会被送到这个文件中,等到程序结束时,再改回原来的流缓冲区。

 

#include

#include

int main()

{

    std::ofstream log("foo.log");

    std::streambuf *oldbuf = std::cout.rdbuf(log.rdbuf());

    std::cout << "输出到标准输出,但实际输出到了foo.log文件中/n";

log << "输出到文件,虽然将cout重定向到了log,但不影响log本身的使用/n";

      // 恢复流缓冲区

    std::cout.rdbuf(oldbuf);

}

 

注意:

1cout可以调用rdbuf来替换缓冲区,但log不能通过调用rdbuf来替换缓冲区。因为ofstreamrdbuf并没有同样的功能。

2.对流的重定向,只是作用在一个代码块内{},出了这个{},就恢复为原来的了,但是对在这个代码块内调用的函数,重定向也会生效。

阅读全文
0 0

相关文章推荐

img
取 消
img