我有一个 Windows Win32/GUI 应用程序,它有时会向stdout
和打印有趣的输出stderr
,所以我想做的是在应用程序退出后将该输出捕获到一个文件中以供查看。
问题是,我可以成功调用freopen_s()
以将输出捕获stdout
到文件中,或者我可以使用它来将stderr
输出捕获到文件中,但是尝试同时执行这两种操作只会产生一个带有经过处理的数据的截断文件。
下面是一个重现问题的简单程序;如果我注释掉这两个freopen_s()
调用中的任何一个,那么我会在blah.txt
创建的文件中得到预期的输出(即两个文本行之一),但我想要的是最终blah.txt
包含两个文本行。
在Windows下可以吗?我可以回退到创建两个不同的文件(例如blah_stdout.txt
和blah_stderr.txt
),但我宁愿不这样做,因为那时我必须手动重建生成 stdout 和 stderr 输出的相对顺序。
int main(int argc, char *argv[])
{
const char * outFileName = "blah.txt";
FILE * junk1 = NULL, junk2 = NULL;
if (freopen_s(&junk1, outFileName, "w", stdout) != 0) abort();
if (freopen_s(&junk2, outFileName , "w", stderr) != 0) abort();
printf("This text was printed to stdout and should appear in blah.txt\n");
fprintf(stderr, "This text was printed to stderr and should appear in blah.txt\n");
return 0;
}