博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++ std::cout重定向到文件
阅读量:5782 次
发布时间:2019-06-18

本文共 1285 字,大约阅读时间需要 4 分钟。

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:

 

 

转载于:https://www.cnblogs.com/butterflybay/p/10347868.html

你可能感兴趣的文章
延伸产业链 中国产粮大省向“精深”问发展
查看>>
消费贷用户70%月收入低于5000元 80、90后是主要人群
查看>>
2018年内蒙古外贸首次突破1000亿元
查看>>
CTOR有助于BCH石墨烯技术更上一层楼
查看>>
被遗忘的CSS
查看>>
Webpack中的sourcemap以及如何在生产和开发环境中合理的设置sourcemap的类型
查看>>
做完小程序项目、老板给我加了6k薪资~
查看>>
java工程师linux命令,这篇文章就够了
查看>>
关于React生命周期的学习
查看>>
webpack雪碧图生成
查看>>
搭建智能合约开发环境Remix IDE及使用
查看>>
Spring Cloud构建微服务架构—服务消费基础
查看>>
RAC实践采坑指北
查看>>
runtime运行时 isa指针 SEL方法选择器 IMP函数指针 Method方法 runtime消息机制 runtime的使用...
查看>>
LeetCode36.有效的数独 JavaScript
查看>>
Scrapy基本用法
查看>>
PAT A1030 动态规划
查看>>
自制一个 elasticsearch-spring-boot-starter
查看>>
软件开发学习的5大技巧,你知道吗?
查看>>
【人物志】美团前端通道主席洪磊:一位产品出身、爱焊电路板的工程师
查看>>