首页 > 解决方案 > 将输出重定向到文件然后返回到 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。

标签: c++filestdinfreopen

解决方案


可能您正在寻找的是 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;
}

推荐阅读