5

可能重复:
如何确定 Console.Out 是否已重定向到文件?
如何检测 Console.In (stdin) 是否已被重定向?

我们的系统当前正在使用一个CursorLeft函数来覆盖打印到控制台窗口的最后一个内容:

Console.CursorLeft = 0;

这是必需的功能,因此我无法将其更改为每次只打印一个新行。

将控制台重定向到文本文件时,IOException会发生。我怎样才能让日志文件跳过显示这些输出或强制它把每个人都写出来?

4

1 回答 1

1

对我来说很明显控制台与文件不同。例如,您可以在控制台中使用颜色,当您将输出重定向到文件时,这些颜色会丢失。因此,不能保证重定向后所有控制台功能都可以保留。我建议质疑该要求,因为它似乎不可行。

无论如何,这里有一个基于下面相同 Win32API 的类似问题:通过 java 运行 .net 控制台时“句柄无效”

这是来自 MSDN 的文章,其中包含有关控制台如何工作的一些信息(在页面底部):http: //msdn.microsoft.com/en-us/library/system.console.aspx

要考虑的另一件事是,尽管您可能无法解决此问题,但您绝对可以重新构建您的应用程序,这样您就可以使用一些缓冲区类抽象与控制台的直接交互,该缓冲区类会累积您想要进行的所有更改虚拟缓冲区中的一行(或几行),然后仅在您确定所有更改都已完成并且该行不再更改时才对 Console.WriteLine 进行一次调用。

于 2012-11-24T10:32:11.050 回答