如何确定Console.Out是否已重定向到文件?

Rom*_*kov 15 .net c# console

如果我的程序正在打印到控制台,我会根据Console.WindowWidth通过插入换行符以某种方式执行自动换行 - 这很有效.

但是,如果程序的输出被重定向到文件或其他程序,我希望它跳过自动换行.如何检测到这种情况?

Console.WindowWidth在两种情况下都返回相同的数字.

如果解决方案可以区分重定向的Console.Out与重定向的Console.Error,则可以获得奖励积分.

Rog*_*mbe 12

.NET 4.5添加Console.IsOutputRedirectedConsole.IsErrorRedirected.


Ant*_*hyy 11

p/invoke GetFileType(GetStdHandle(STD_OUTPUT_HANDLE)),或调用一个无害的控制台函数GetConsoleScreenBufferInfo来检查无效的句柄错误.如果您想了解标准错误,请使用STD_ERROR_HANDLE.我相信你甚至可以比较返回的句柄GetStdHandle(STD_OUTPUT_HANDLE)GetStdHandle(STD_ERROR_HANDLE)检测类似的东西2>&1.


Ada*_*son 8

虽然这有点阴暗,可能无法保证工作,你可以试试这个:

bool isRedirected;

try
{
    isRedirected = Console.CursorVisible && false;
}
catch
{
    isRedirected = true;
}
Run Code Online (Sandbox Code Playgroud)

重定向控制台时,调用CursorVisible会引发异常.