方法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.对流的重定向,只是作用在一个代码块内{},出了这个{},就恢复为原来的了。但是对在这个代码块内调用的函数,重定向也会生效
4276

被折叠的 条评论
为什么被折叠?



