掌握 C# 控制台應用程式中的輸入重定向偵測
許多 C# 控制台應用程式需要不同的行為,具體取決於使用者輸入是來自鍵盤還是來自檔案等重定向來源。本指南提供了用於檢測輸入重定向的強大解決方案。
了解挑戰
控制台應用程式通常需要根據輸入來源調整其功能。 確定輸入是來自鍵盤還是外部檔案是實現這種適應性的關鍵。
有效的解決方案
最可靠的方法是透過 P/Invoke 使用 Windows FileType()
API 函數。此函數標識與文件句柄關聯的文件類型。 下面的 ConsoleEx
輔助類別示範了這一點:
<code class="language-csharp">using System; using System.Runtime.InteropServices; public static class ConsoleEx { public static bool IsOutputRedirected => FileType.Char != GetFileType(GetStdHandle(StdHandle.Stdout)); public static bool IsInputRedirected => FileType.Char != GetFileType(GetStdHandle(StdHandle.Stdin)); public static bool IsErrorRedirected => FileType.Char != GetFileType(GetStdHandle(StdHandle.Stderr)); // P/Invoke declarations: 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); }</code>
實際應用
要檢查輸入重定向,只需使用:
<code class="language-csharp">bool isInputRedirected = ConsoleEx.IsInputRedirected;</code>
現代 .NET 方法
.NET Framework 4.5 及更高版本在 Console
類別中提供此功能的內建支援。 IsInputRedirected
屬性提供了一個直接且更簡單的解決方案:
<code class="language-csharp">bool isInputRedirected = Console.IsInputRedirected;</code>
透過這些技術,您可以有效地偵測輸入重新導向並建立更靈活、更強壯的控制台應用程式。
以上是如何偵測 C# 控制台應用程式中的輸入重定向?的詳細內容。更多資訊請關注PHP中文網其他相關文章!