Maison >développement back-end >C++ >L'entrée de la console est-elle redirigée ?

L'entrée de la console est-elle redirigée ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-12 17:16:45119parcourir

Is Console Input Redirected?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn