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

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

First Snowflakes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值