【发布时间】:2019-01-08 14:40:42
【问题描述】:
我正在尝试重定向标准输出,以便 windows 应用程序中的 printf 将转到我选择的文件。
我正在这样做:
outFile = fopen("log.txt", "w");
*stdout = *outFile;
setvbuf(stdout, NULL, _IONBF, 0);
但 printf 仍会写入控制台(或在基于 GUI 的 win32 应用程序上无处)
我可以通过这样做重定向“std::cout”:
outFileStr = std::ofstream(outFile);
std::cout.rdbuf(outFileStr.rdbuf());
但是 printf 似乎在做自己的事情。 不幸的是,我需要重定向 printf,因为我正在尝试将 python 集成到 C++ 框架中,并且这似乎依赖于 printf 而不是 std::cout。
std::cout' 似乎被重定向但不是 printf。
【问题讨论】:
-
C语言没那么简单,但是有
freopen函数可以帮到你。 -
基于 GUI 的 Win32 应用程序是否甚至有标准输出?
-
@Someprogrammerdude 谢谢老兄,我不知道这个功能,完成了这项工作。我遇到了很多只是覆盖了“stdout”但没有用的例子。
-
@LightnessRacesinOrbit 如果你重定向 std::cout 那么是的。我这样做是为了将 std::cout 多路复用到写入 OutputDebugString、控制台(如果可用)和其他日志的缓冲区对象。希望现在我可以用基于 printf 的东西做类似的技巧。
-
轻微吹毛求疵:您在 C++ 中所做的并不是真正的“重定向”,而是替换了
std::cout写入的整个缓冲区。