您可以通过调用Windows FileType()API函数来查找。这是一个帮助器类:
using System;using System.Runtime.InteropServices;public static class ConsoleEx { public static bool IsOutputRedirected { get { return FileType.Char != GetFileType(GetStdHandle(StdHandle.Stdout)); } } public static bool IsInputRedirected { get { return FileType.Char != GetFileType(GetStdHandle(StdHandle.Stdin)); } } public static bool IsErrorRedirected { get { return FileType.Char != GetFileType(GetStdHandle(StdHandle.Stderr)); } } // P/Invoke: private enum FileType { Unknown, Disk, Char, Pipe }; private enum StdHandle { Stdin = -10, Stdout = -11, Stderr = -12 }; [Dllimport("kernel32.dll")] private static extern FileType GetFileType(IntPtr hdl); [Dllimport("kernel32.dll")] private static extern IntPtr GetStdHandle(StdHandle std);}
用法:
bool inputRedirected = ConsoleEx.IsInputRedirected;
更新:这些方法已添加到.NET 4.5中的Console类中。没有署名,我可能会添加:(只需使用相应的方法而不是此帮助器类。
https://msdn.microsoft.com/zh-
CN/library/system.console.isoutputredirected.aspx
https://msdn.microsoft.com/en-
us/library/system.console.isinputredirected.aspx
https://
msdn.microsoft.com/zh-
CN/library/system.console.iserrorredirected.aspx
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)