Beherrschung der Eingabeumleitungserkennung in C#-Konsolenanwendungen
Viele C#-Konsolenanwendungen erfordern unterschiedliche Verhaltensweisen, je nachdem, ob Benutzereingaben von der Tastatur oder einer umgeleiteten Quelle wie einer Datei stammen. Dieser Leitfaden bietet eine robuste Lösung zur Erkennung der Eingabeumleitung.
Die Herausforderung verstehen
Konsolenanwendungen müssen ihre Funktionalität häufig basierend auf der Eingabequelle anpassen. Der Schlüssel zum Erreichen dieser Anpassungsfähigkeit ist die Feststellung, ob die Eingabe über die Tastatur oder eine externe Datei erfolgt.
Effektive Lösung
Die zuverlässigste Methode verwendet die Windows FileType()
API-Funktion über P/Invoke. Diese Funktion identifiziert den Dateityp, der einem Dateihandle zugeordnet ist. Die ConsoleEx
Hilfsklasse unten demonstriert dies:
<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>
Praktische Anwendung
Um die Eingabeumleitung zu überprüfen, verwenden Sie einfach:
<code class="language-csharp">bool isInputRedirected = ConsoleEx.IsInputRedirected;</code>
Moderner .NET-Ansatz
.NET Framework 4.5 und spätere Versionen bieten integrierte Unterstützung für diese Funktionalität innerhalb der Console
-Klasse. Die IsInputRedirected
-Eigenschaft bietet eine direkte und einfachere Lösung:
<code class="language-csharp">bool isInputRedirected = Console.IsInputRedirected;</code>
Mit diesen Techniken können Sie die Eingabeumleitung effektiv erkennen und flexiblere und robustere Konsolenanwendungen erstellen.
Das obige ist der detaillierte Inhalt vonWie kann ich die Eingabeumleitung in C#-Konsolenanwendungen erkennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!