使用Console.CursorLeft重定向控制台

时间:2012-11-22 23:58:20

标签: c# console

  

可能重复:
  How can I determine whether Console.Out has been redirected to a file?
  How to detect if Console.In (stdin) has been redirected?

我们的系统目前正在使用CursorLeft函数来记录打印到控制台窗口的最后一件事:

Console.CursorLeft = 0;

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

将控制台重定向到文本文件时,会发生IOException。如何让日志文件跳过显示这些输出或强制它写出所有输出?

1 个答案:

答案 0 :(得分:0)

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

无论如何,基于相同的Win32API下面是一个类似的问题:"The handle is invalid" when running .net console via java

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

另一件需要考虑的事情是,尽管您可能无法解决此问题,但您肯定可以重新设计应用程序,以便使用一些缓冲类来抽象与控制台的直接交互,这些缓冲类会累积您想要的所有更改在虚拟缓冲区中生成一行(或几行),然后只知道所有更改都已完成且该行不再更改时,只调用一次Console.WriteLine。 / p>