检查输出是否重定向

Nip*_*rus 10 .net c# console redirect

我有一个用C#编写的控制台应用程序,它处理一些数据然后打印结果.在结果可用之前,会有一些动画(/ - \|)和进度百分比(xx%)不断更新.

显然,如果用户重定向我的应用程序的输出,它将被打印到输出被重定向到的文本文件.如果可能的话我想避免这种情况.

那么有没有办法检测我的应用程序的输出是否被重定向?我正在考虑在使用指定参数运行时仅显示进度指示器,但我希望有人会对我有一个好的答案.

Mat*_*oks 13

从.NET Framework 4.5开始,您可以使用该Console.IsOutputRedirected属性来检测它.

还有Console.IsErrorRedirected.


kon*_*ski 7

事实证明,它很快将以优雅和跨平台的方式提供: 链接.


Sto*_*bor 5

您可以使用本机方法GetConsoleMode来查看stdout是否要转到控制台.

WriteConsole文档中的备注建议使用此方法:

...确定输出句柄是否是控制台句柄(一种方法是调用GetConsoleMode函数并检查它是否成功)...


Mat*_*ley 3

你不能。重定向的输出完全超出了执行程序的范围。但是,您可以添加一个命令行选项来禁用漂亮的输出,以便它也可以重定向使用。

编辑:您可以(现在)...使用 .NET 4.5 及以上版本(请参阅Matt Brooks 的回答)。