Heim > Backend-Entwicklung > C++ > Wie kann ich die Eingabeumleitung in C#-Konsolenanwendungen erkennen?

Wie kann ich die Eingabeumleitung in C#-Konsolenanwendungen erkennen?

DDD
Freigeben: 2025-01-12 17:01:47
Original
175 Leute haben es durchsucht

How Can I Detect Input Redirection in C# Console Applications?

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>
Nach dem Login kopieren

Praktische Anwendung

Um die Eingabeumleitung zu überprüfen, verwenden Sie einfach:

<code class="language-csharp">bool isInputRedirected = ConsoleEx.IsInputRedirected;</code>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage