Maîtriser la détection de redirection d'entrée dans les applications de console C#
De nombreuses applications console C# nécessitent des comportements différents selon que la saisie utilisateur provient du clavier ou d'une source redirigée comme un fichier. Ce guide fournit une solution robuste pour détecter la redirection d'entrée.
Comprendre le défi
Les applications console doivent souvent adapter leurs fonctionnalités en fonction de la source de l'entrée. Déterminer si la saisie provient du clavier ou d'un fichier externe est la clé pour parvenir à cette adaptabilité.
Solution efficace
La méthode la plus fiable utilise la fonction API Windows FileType()
via P/Invoke. Cette fonction identifie le type de fichier associé à un descripteur de fichier. La classe d'assistance ConsoleEx
ci-dessous le démontre :
<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>
Application pratique
Pour vérifier la redirection des entrées, utilisez simplement :
<code class="language-csharp">bool isInputRedirected = ConsoleEx.IsInputRedirected;</code>
Approche .NET moderne
.NET Framework 4.5 et versions ultérieures offrent une prise en charge intégrée de cette fonctionnalité au sein de la classe Console
. La propriété IsInputRedirected
offre une solution directe et plus simple :
<code class="language-csharp">bool isInputRedirected = Console.IsInputRedirected;</code>
Grâce à ces techniques, vous pouvez détecter efficacement la redirection d'entrée et créer des applications de console plus flexibles et plus robustes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!