Unterscheidung von Tastatureingaben und Dateiumleitung in C#-Konsolen-Apps
In diesem Artikel wird gezeigt, wie Sie feststellen können, ob die Eingabe einer C#-Konsolenanwendung von der Tastatur oder einer umgeleiteten Datei stammt. Diese Fähigkeit ist von entscheidender Bedeutung für die Erstellung von Anwendungen, die ihr Verhalten basierend auf der Eingabequelle anpassen.
Methode mit P/Invoke
Die Windows-API-Funktion FileType()
bietet eine Lösung. Diese Funktionalität ist in der folgenden C#-Hilfsklasse verpackt:
<code class="language-csharp">public static class ConsoleEx { 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); public static bool IsInputRedirected { get { return FileType.Char != GetFileType(GetStdHandle(StdHandle.Stdin)); } } }</code>
Umsetzung
Um nach umgeleiteten Eingaben zu suchen, verwenden Sie einfach:
<code class="language-csharp">bool isRedirected = ConsoleEx.IsInputRedirected;</code>
Alternative: .NET 4.5 und höher
Für .NET Framework 4.5 und spätere Versionen stellt die Klasse Console
integrierte Eigenschaften bereit:
Console.IsInputRedirected
Console.IsOutputRedirected
Console.IsErrorRedirected
Diese Eigenschaften bieten einen einfacheren Ansatz zur Erkennung der Eingabeumleitung. Wählen Sie die Methode, die am besten zur .NET Framework-Version Ihres Projekts passt.
Das obige ist der detaillierte Inhalt vonWie kann ich feststellen, ob die Eingabe einer C#-Konsolenanwendung über die Tastatur oder eine Datei erfolgt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!