Konsoleneingabeumleitung erkennen
Viele Konsolenanwendungen müssen ihr Verhalten anpassen, je nachdem, ob die Eingabe über die Tastatur oder eine Datei erfolgt. Dieser Artikel zeigt, wie Sie diese Eingabequellen zuverlässig unterscheiden können.
Methode 1: Verwendung der Windows FileType() API (P/Invoke)
Eine robuste Lösung besteht darin, die Windows FileType()
API-Funktion über P/Invoke zu nutzen. Diese C#-Hilfsklasse vereinfacht den Prozess:
<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>
Umsetzung:
Überprüfen Sie die Eingabeumleitung mithilfe der Klasse ConsoleEx
:
<code class="language-csharp">bool isInputRedirected = ConsoleEx.IsInputRedirected;</code>
Methode 2: .NET 4.5 und höher
.NET 4.5 und spätere Versionen bieten integrierte Methoden innerhalb der Console
-Klasse. Für neuere Anwendungen ist dies der bevorzugte Ansatz:
Console.IsOutputRedirected
Console.IsInputRedirected
Console.IsErrorRedirected
Diese bieten eine einfachere und direktere Möglichkeit, den Weiterleitungsstatus zu bestimmen. Wählen Sie die Methode, die am besten zu Ihrer .NET Framework-Version passt.
Das obige ist der detaillierte Inhalt vonWird die Konsoleneingabe umgeleitet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!