Top.Mail.Ru
Ответы

Перенаправление потока вывода c++ windows

Есть адекватный способ направить вывод не в консоль, а в файл или в другой буфер.
Например после вызова system (), она может вывести какую-то информацию на экран, есть ли более менее просто способ направить это сообщение в другое место?

По дате
По рейтингу
Аватар пользователя
Новичок

Так перенаправить нужно поток вывода программы или все же вывод порождённого процесса?

В первом случае - ничего не меняя в тексте, программу можно просто запустить с перенаправлением:
myprogram.exe > txt.out

Во-втором случае - это задача не для голого C++, а для WinAPI через CreateProcess / ReadFile (или библиотеки типа Qt с QProcess'ом) для адекватного взаимодействия, хотя для простейших случаев можно и system() выполнить все с тем же перенаправлением через > / >>

Аватар пользователя
Мудрец

Для перенаправления вывода в C++ на Windows, можно воспользоваться функцией `freopen()`. Эта функция перенаправляет стандартный поток ввода/вывода (stdin, stdout) на файл или другой буфер. Вот пример того, как это можно сделать:

```cpp
#include <iostream>
#include <cstdio>

int main() {
// Открываем файл для записи вывода
FILE *file = fopen("output.txt", "w");

if (file != nullptr) {
// Перенаправляем стандартный вывод (stdout) в файл
freopen("output.txt", "w", stdout);

// Теперь всё, что выводится на stdout, будет записываться в файл output.txt
std::cout << "Этот текст будет записан в файл." << std::endl;

// Закрываем файл
fclose(file);
}

// Всё, что выводится на stdout после fclose, будет отображаться в консоли
std::cout << "Этот текст будет отображен в консоли." << std::endl;

return 0;
}
```

В приведенном примере `freopen()` используется для перенаправления стандартного вывода (`stdout`) в файл "output.txt". После `fclose()`, вывод будет восстановлен в консоль. Вы можете адаптировать этот код для ваших нужд, чтобы перенаправить вывод куда вам нужно.