将控制台输出写入.txt并在控制台上显示

时间:2018-08-12 18:32:15

标签: c++ visual-studio console output prompt

我最近发现,您可以使用Visual Studio(在项目属性的“命令参数”中添加“> output.txt”)将C ++程序的控制台输出保存到文本文件中。

问题是我希望输出同时显示在我创建的输出文件和命令控制台中,以便于调试(一旦将输出保存到文件,控制台上将不再显示)。是否可以选择在Visual Studio中启用这两项功能或类似功能?

2 个答案:

答案 0 :(得分:2)

您可以使用自定义流在输出时实现将数据发送到多个目的地。通过创建合适的流缓冲区,很容易创建它们。例如:

#include <fstream>
#include <iostream>
#include <ostream>
#include <streambuf>

class teebuf
    : public std::streambuf {
    std::streambuf* d_sbuf1;
    std::streambuf* d_sbuf2;
public:
    teebuf(std::streambuf* sbuf1, std::streambuf* sbuf2)
        : d_sbuf1(sbuf1), d_sbuf2(sbuf2) {
    }
    int overflow(int c) {
        if (c != std::char_traits<char>::eof()) {
            this->d_sbuf1->sputc(c);
            this->d_sbuf2->sputc(c);
        }
        return std::char_traits<char>::not_eof(c);
    }
};

int main() {
    std::ofstream   out("foo.txt");
    teebuf          tb{out.rdbuf(), std::cout.rdbuf()};
    std::streambuf* coutbuf = std::cout.rdbuf(&tb);
    std::cout << "hello world! (to both the console and the file)\n";

    std::cout.rdbuf(coutbuf); // needs to be replaced as it gets used to flush
}

当然,这是一种侵入性方法,需要更改源。我不使用MSVC ++,也无法评论是否存在将标准输出保存到文件的方法。

答案 1 :(得分:-2)

您可以使用命令tee

实现此目的

假设您有一个名为 myExe 的可执行文件(无论是否用C ++实现),您可以执行以下操作:

document.getElementById("mySavedModel").value = myDiagram.model.toJson();

myDiagram.model = go.Model.fromJson(document.getElementById("mySavedModel").value);

如果要在Visual Studio中实现此目的,请使用以下其中一项更改./myExec | tee output.txt

1。在Linux上工作:

> output.txt

2。在Windows上工作:

| tee output.txt

相关问题