方法1(最笨):
fstream output;
把cout全部替换成output。。。
方法2:
利用命名空间自定义一个cout
namespace Calendar
{
fstream cout;
}
函数内:
using Calendar::cout;
在当前作用域内的cout实现全部输出到文件
方法3(最好):
改变cout的输出对象,使其输出到文件
fstream out(FileName);
streambuf *oldbuf = cout.rdbuf(out.rdbuf());//保存标准输出并定向到文件
cout.rdbuf(oldbuf);//重新定向到标准输出
MSDN example:
basic_ios::rdbuf
// basic_ios_rdbuf.cpp // compile with: /EHsc #include <ios> #include <iostream> #include <fstream> int main( ) { using namespace std; ofstream file( "rdbuf.txt" ); streambuf *x = cout.rdbuf( file.rdbuf( ) ); cout << "test" << endl; // Goes to file cout.rdbuf(x); cout << "test2" << endl; }
注意:
1.cout可以调用rdbuf来替换缓冲区,但log不能通过调用rdbuf来替换缓冲区。
因为ofstream的rdbuf并没有同样的功能。
2.对流的重定向,只是作用在一个代码块内{},出了这个{},就恢复为原来的了。
但是对在这个代码块内调用的函数,重定向也会生效