#include "stdafx.h"
#include <iostream>
#include <fstream>
int main(int argc, char* argv[])
{
using namespace std;
cout << "Hello, Let's begin a test of cout to file." << endl;
// 保存cout流缓冲区指针
streambuf* coutBuf = cout.rdbuf();
ofstream of("out.txt");
// 获取文件out.txt流缓冲区指针
streambuf* fileBuf = of.rdbuf();
// 设置cout流缓冲区指针为out.txt的流缓冲区指针
cout.rdbuf(fileBuf);
cout << "Name " << "Chen" << endl;
cout << "Sex " << "Female" << endl;
cout << "E-mail"<< "Chen@qq.com" << endl;
of.flush();
of.close();
// 恢复cout原来的流缓冲区指针
cout.rdbuf(coutBuf);
cout << "Write Personal Information over..." << endl;
system("PAUSE");
return 0;
}
C++是通过rdbuf函数来进行流重定向的,例如:
#include <iostream>
#include <fstream>
using std::cout;
using std::streambuf;
using std::rdbuf;
using std::ofstream;
int main( void )
{
ofstream fout( "out.txt" );
streambuf * OldBuf = cout.rdbuf( fout.rdbuf( ) ); //保存cout的流缓冲类指针并用fout的流缓冲类指针代替
cout << "example"; //cout的内容被写入文件out.txt中
cout.rdbuf( OldBuf ); //恢复cout的流缓冲类指针
cout << "reload"; //恢复输出到终端
return 0;
}