Записать вывод консоли в .txt И показать его на консоли

Недавно я обнаружил, что вы можете сохранить вывод консоли из программы на C ++ в текстовый файл с помощью Visual Studio (добавив «> output.txt» в аргументах команды в свойствах вашего проекта).

Проблема в том, что я хочу, чтобы выходные данные отображались как внутри выходного файла, который я создаю, так и в командной консоли, для упрощения отладки (после сохранения вывода в файл он больше не отображается на консоли). Есть ли возможность включить обе эти функции в Visual Studio или что-то подобное?

0

Решение

Вы можете добиться отправки данных нескольким получателям при выводе, используя пользовательский поток. Их легко создать, создав подходящий буфер потока. Например:

#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 ++ и не могу прокомментировать, есть ли способ сохранить стандартный вывод в файл.

2

Другие решения

Вы можете добиться этого с помощью команды тройник

Предполагая, что у вас есть исполняемый файл (не имеет значения, реализован ли он в C ++ или нет) с именем myExe, Вы можете сделать следующее:

./myExec | tee output.txt

Если вы хотите добиться этого в Visual Studio, измените > output.txt с одним из следующих

1. Работа на Linux:

| tee output.txt

2. Работа на Windows:

> output.txt && type output.txt

-2

По вопросам рекламы [email protected]