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
c++ std::cout重定向到文件的更多相关文章
- Android如何打印std::cout/printf(重定向stdout)
Android应用调试时没有stdout和stderr的输出,网上看到的解释都是下面这个样子: ################################################# An ...
- C/C++-标准输入/输出重定向为文件输入/输出
/* Time: 2017-02-22 11:11:15 Describe: C++程序将标准输入/输出重定向为文件输入/输出. */ #include <iostream> #inclu ...
- <unistd.h>的close(0)导致std::cout被关闭
代码如下:其中ZJ::open_max返回系统允许的打开的文件的最大个数 #include "util.h" #include <unistd.h> // int cl ...
- 使用std::cout不能输出显示
在测试一行函数时,出现std::cout不能输出的情况,找不到原因. 1. 只好从main函数第一行,开始测试,直到发现一个函数 o_Initer.ekf_filter(filter, ...
- 【std::regex】C++文件路径正则表达式
今天代码中遇到使用正则表达式匹配一个文件路径的问题,需要验证传入的文件路径是否合法,学习了简单的正则表达式的写法后,简单写了如下代码,在网上找了一些在线测试正则表达式的网站,测试可以通过. std:: ...
- Visual Studio将std::cout输出到Output窗口
在debug的时候,输出到Output需要使用OutputDebugString函数,但部分库的log是采用std::cout输出的,需要用控制台(黑窗)程序来查看输出.有没有一种使用GUI和Outp ...
- Linux下执行的java命令重定向到文件中的方法
在Linux下通常会执行如:java -version 的命令, 但是,命令只是打印到了屏幕上不能重定向到文件中或标准输出流中. 此时需要将错误输出流重定向到标准输出流中就可以得到了. 比如:java ...
- std::cout彩色输出
Mac OS效果 Windows 效果 想写这个东西其实是因为最近要写个命令行的工具,但是有个问题是什么呢?就是传统的那个黑漆漆的窗口看起来很蛋疼.并且完全看不到重点,于是就想起 来这么一个东西.相对 ...
- 02 - 用wxStreamToTextRedirector和wxTextCtrl输出std::cout
遇到问题,单行显示, new line丢失 原因: wxTextCtrl默认是单行的 解决办法:使用wxTE_MULTILINE参数初始化wxTextCtrl wxTextCtrl *text = , ...
随机推荐
- Linux中在vim/vi模式下对文本的查找和替换
查找: 1.vim filename 进入一般模式下 2.查找和替换方法 /word 向下查找word 的字符串 例如 /chengtingting 向下查找字符chengtingt ...
- include指令 include动作
- 微信小程序——<scroll-view>滚动到最底部
最近在做个直播间,有个这样的需要,就是进入到页面,<scroll-view>需要滚动到最底部,并且发送消息之后自动的滚动到底部. 开始想着计算里面内容的高度,然后通过设置 scroll-t ...
- 08-Flutter移动电商实战-dio基础_伪造请求头获取数据
在很多时候,后端为了安全都会有一些请求头的限制,只有请求头对了,才能正确返回数据.这虽然限制了一些人恶意请求数据,但是对于我们聪明的程序员来说,就是形同虚设.这篇文章就以极客时间 为例,讲一下通过伪造 ...
- .net Web 项目的文件/文件夹上传下载
以ASP.NET Core WebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API ,包括文件的上传和下载. 准备文件上传的API #region 文件上传 ...
- mysql linux上安装使用
安装启动 安装之前可以看下系统中有没有已经安装. 查看所有软件:dpkg -l 1.查看mysql安装的版本 mysql --version 2.mysql状态 service mysql statu ...
- 开源项目 07 AutoMapper
using AutoMapper; using Newtonsoft.Json; using System; using System.Collections.Generic; using Syste ...
- AC自动机入门经典题目(两种表达方式)
Keywords Search 指针方式: /* Keywords Search */ # include <iostream> # include <stdio.h> # i ...
- rabbitmq添加user及vhost
rabbitmqctl add_vhost /myhost # 添加 vhost rabbitmqctl add_user me me123 # 设置用户和密码 rabbitmqctl set_per ...
- java.lang.Thread类的静态方法sleep()和yield()的比较
[线程让步yield()方法] yield()方法可以让当前正在执行的线程暂停,但它不会阻塞该线程,它只是将该线程从运行状态转入就绪状态. 只是让当前的线程暂停一下,让系统的线程调度器重新调度一次. ...