【问题标题】:How to write console output to a text file in cpp?如何将控制台输出写入cpp中的文本文件?
【发布时间】:2011-03-17 07:08:48
【问题描述】:

我正在尝试将控制台数据写入 cpp 中的单独文本文件。任何人都可以帮助我提供示例代码。

【问题讨论】:

  • 控制台数据是什么进程?你自己的过程?您创建的其他流程?
  • 什么是“控制台数据”?您目前的方法如何?
  • 任何搜索答案的人都会寻找 user11977 的答案。这是正确的。

标签: c++ cmd


【解决方案1】:

创建文件 -> 将输入重定向到文件中

#include <iostream>
#include <fstream>
#include <string>

int main()
{
    std::string file_name;
    std::string str;
  
    std::cout << "Add file name:";
    std::cin >> file_name;

    std::cout << "Open file:" << file_name << std::endl;

    std::ofstream oFile(file_name);

    if (!oFile) {
        std::cout << "ERROR: we can't open file:" << file_name << std::endl;
        return 1;
    }
    else {
        std::cout << "File is open: " << oFile.is_open() << std::endl;
    }

    std::cout << "Enter you sentence into file:\n";
    getline(std::cin >> std::ws, str);
    oFile << str;
    oFile.close();


    return 0;
}

【讨论】:

    【解决方案2】:

    smerrimans 的回答应该可以帮到你。

    还可以选择实现自己的 streambuf 并将其与 std::cout 和 std::cerr 一起使用,以将打印输出存储到文件而不是打印到控制台。我前段时间这样做是为了将打印输出重定向到某种带有时间戳的旋转日志。

    您需要稍微了解一下它的工作原理,this book 帮助我把它弄好。

    如果这不是你想要的,那就有点矫枉过正了。

    【讨论】:

      【解决方案3】:

      如果你想用自己的流程写,我建议一个简单的打印方法

      void print(const string str, ostream & output)
      {
          output << str;
      }
      

      然后就可以调用了

      print("Print this", cout);
      

      用于控制台输出,或

      ofstream filestream("filename.out");
      print("Print this", filestream);
      

      写入文件“filename.out”。当然,如果print 是一个类方法,可以输出您需要的所有对象的特定信息,那么您将获得最大的收益,这样您就可以轻松地将输出定向到不同的流。

      【讨论】:

      • 您定义的print 函数几乎没有任何好处。您可以为第一个示例轻松编写 cout &lt;&lt; "Print this";filestream &lt;&lt; "Print this";" in the second example. Unless print` 添加一些额外的逻辑(可能写入时间戳或写入标准输出和文件),这样的功能没有任何好处。跨度>
      【解决方案4】:

      bbtrb 写道:

      void print(const string str, ostream & 输出) { 输出

      当然比这个好

      ostream& output(ostream& out, string str) {out << str; return out;}
      

      这样您甚至可以让函数返回经过处理的输出流。

      【讨论】:

        【解决方案5】:

        如果你想创建一个子进程并重定向它的输出,你可以这样做:

        FILE* filePtr = popen("mycmd");
        FILE* outputPtr = fopen("myfile.txt");
        
        if(filePtr && outputPtr) {
            char tmp;
            while((tmp = getc(filePtr)) != EOF)
                putc(tmp, outputPtr);
        
            pclose(filePtr);
            fclose(outputPtr);
        }
        

        【讨论】:

          【解决方案6】:

          有多种方法可以做到这一点。您可以使用programname &gt; out.txt 从命令行重定向它。或者您可以在程序开始时使用freopen("out.txt","w",stdout);

          【讨论】:

          • 这对我来说效果很好。但突然间,cmd 控制台输出完全不可见。当我删除此行时,cmd 输出可见