我最近发现,您可以使用Visual Studio(在项目属性的“命令参数”中添加“> output.txt”)将C ++程序的控制台输出保存到文本文件中。
问题是我希望输出同时显示在我创建的输出文件和命令控制台中,以便于调试(一旦将输出保存到文件,控制台上将不再显示)。是否可以选择在Visual Studio中启用这两项功能或类似功能?
答案 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