c++ std::cout重定向到文件

cout默认是与监视器(屏幕)相连,cout出来的内容会输出到屏幕上,通常是会在命令行窗口之中。但有时,我们希望将cout出来的具体日志、错误信息写到某个文件之中,而屏幕上仅仅显示出当前进行的任务,以及程序运行状态等信息。

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

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:

 

https://blog.csdn.net/sinat_36219858/article/details/80380851

 

原文链接: https://www.cnblogs.com/butterflybay/p/10347868.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    c++ std::cout重定向到文件

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/286673

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月15日 上午9:32
下一篇 2023年2月15日 上午9:32

相关推荐