cout默认是与监视器(屏幕)相连,cout出来的内容会输出到屏幕上,通常是会在命令行窗口之中。但有时,我们希望将cout出来的具体日志、错误信息写到某个文件之中,而屏幕上仅仅显示出当前进行的任务,以及程序运行状态等信息。
#include "stdafx.h"#include#include 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;}
cout是输出语句,flush是缓冲区的内容,cout<<flush表示将缓冲区的内容马上送进cout,把输出缓冲区刷新。
注意:
1. cout可以调用 rdbuf来替换缓冲区,但 of不能通过调用 rdbuf来替换缓冲区。因为 ofstream的 rdbuf并没有同样的功能。
2.对流的重定向,只是作用在一个代码块内 {},出了这个 {},就恢复为原来的了,但是对在这个代码块内调用的函数,重定向也会生效
当我们调试完自己的代码后,可以通过以下方式屏蔽cout的输出:
重定向(输出到null设备自然就没输出了): ofstream file("/dev/null"); //save cout stream buffer streambuf* strm_buffer = cout.rdbuf(); // redirect cout to /dev/null cout.rdbuf(file.rdbuf());ref: