[The language of those forums is english]
Use :
#define REDIR_STDOUT(filename) freopen(filename,"w+",stdout)
and
REDIRECT_STDOUT("CONOUT$")
This browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
#include <stdio.h>
#include <Windows.h>
#define FILENAME "data.txt" // 数据文件名
/// <summary>重定向标准输出流到某个文件</summary>
/// <param name="filename">
/// 文件名。如果原来的文件存在,则覆盖它;否则新建一个文件。
/// <para>如果想要将标准输出重定向到控制台,请再次使用此宏,文件名填 "con",
/// 即 Windows 的控制台文件。</para>
/// </param>
#define REDIR_STDOUT(filename) assert(freopen(filename, "w", stdout) != NULL)
// ...
case 4: // 保存链表的数据到文件。
{
REDIR_STDOUT(FILENAME);
pri_dates(&l);
REDIR_STDOUT("con");
}
break;
// ...
HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE); // 输出句柄
CONSOLE_SCREEN_BUFFER_INFO csbi;
assert(GetConsoleScreenBufferInfo(hout, &csbi)); // 断言失败,返回ERROR_ACCESS_DENIED!
pri_dates(&l);
中,l
是链表,这个调用的意思是在屏幕上打印日期链表的内容。用"con"重定向回控制台的时候还是可以在屏幕上输出内容的。后面的 Win32 API 调用部分是因为“分屏输出文件内容”这一功能的需要才增加的。如果没有重定向的话 csbi
的信息可以正常获取,断言成功。不知道为什么无法获取 csbi
的信息,难道是 hout
获取到了非法的句柄了吗?
[The language of those forums is english]
Use :
#define REDIR_STDOUT(filename) freopen(filename,"w+",stdout)
and
REDIRECT_STDOUT("CONOUT$")