c++ - 将输出重定向到文件然后返回到 C++ 中的控制台
问题描述
任务是读取输入input.txt
并将输出写入output.txt
. 但是,在完成上述任务后,现在应该在控制台上显示进一步的指令/输出。
开始了解 c++ 中的 freopen() ,它适用于给定任务的前半部分。但不幸的是,我不知道如何将输出再次重定向回控制台。
void writeIntoFile(){
freopen("input.txt","r",stdin); // Task 1. Reading from input.txt file
freopen("output.txt","w",stdout); // Task 2. Writing to output.txt file
printf("This sentence is redirected to a file.");
fclose(stdout);
printf("This sentence is redirected to console"); // Task 3. Write further output to console
}
我对 fclose() 的期望是它最终会写入文本文件,因此会进一步将输出写入控制台,但事实并非如此。我怎样才能完成任务 3。
解决方案
可能您正在寻找的是 doomista 在评论中提到的 rdbuf() 。
这是一种重定向输出的方法。
#include <iostream>
#include <fstream>
int main()
{
/** backup cout buffer and redirect to out.txt **/
std::ofstream out("out.txt");
auto *coutbuf = std::cout.rdbuf();
std::cout.rdbuf(out.rdbuf());
std::cout << "This will be redirected to file out.txt" << std::endl;
/** reset cout buffer **/
std::cout.rdbuf(coutbuf);
std::cout << "This will be printed on console" << std::endl;
return 0;
}
推荐阅读
- javascript - 我试图访问 DOM 中无线电输入的名称属性,但显然所有名称字段的值都为 false?
- regex - NiFi - 使用先前属性 + 硬编码文本创建新属性的新属性
- c++ - std 线程构造函数是否采用可变线程函数?
- java - FAB on click 根据当前显示的片段开始新活动
- c++ - MSVC 编译器尝试调用已删除的复制构造函数,而不是移动地图元素
- django - 正确的日志配置以禁用 django 错误电子邮件
- c++ - 滥用指针会产生分段错误。我仍然不确定如何纠正它
- mysql - Node.js 自动迁移
- html - 如何在 pug 脚本中访问传递给 pug 的变量?
- android - 使用 reactNative 存储大量带有元数据的小文本的好方法是什么?