#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; }