Détection de la redirection des entrées de la console
De nombreuses applications console doivent adapter leur comportement selon que la saisie provient du clavier ou d'un fichier. Cet article montre comment distinguer de manière fiable ces sources d'entrée.
Méthode 1 : Utilisation de l'API Windows FileType() (P/Invoke)
Une solution robuste consiste à exploiter la fonction API Windows FileType()
via P/Invoke. Cette classe d'assistance C# simplifie le processus :
<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>
Mise en œuvre :
Vérifiez la redirection des entrées à l'aide de la classe ConsoleEx
:
<code class="language-csharp">bool isInputRedirected = ConsoleEx.IsInputRedirected;</code>
Méthode 2 : .NET 4.5 et versions ultérieures
.NET 4.5 et versions ultérieures fournissent des méthodes intégrées au sein de la classe Console
. Pour les applications plus récentes, voici l’approche privilégiée :
Console.IsOutputRedirected
Console.IsInputRedirected
Console.IsErrorRedirected
Ceux-ci offrent un moyen plus simple et plus direct de déterminer le statut de redirection. Choisissez la méthode qui convient le mieux à votre version du framework .NET.
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!