ホームページ > バックエンド開発 > C++ > コンソール入力はリダイレクトされますか?

コンソール入力はリダイレクトされますか?

Susan Sarandon
リリース: 2025-01-12 17:16:45
オリジナル
113 人が閲覧しました

Is Console Input Redirected?

コンソール入力リダイレクトの検出

多くのコンソール アプリケーションは、入力がキーボードからのものかファイルからのものかに応じて動作を調整する必要があります。 この記事では、これらの入力ソースを確実に区別する方法を説明します。

方法 1: Windows FileType() API (P/Invoke) を使用する

堅牢なソリューションには、P/Invoke を介して Windows FileType() API 関数を活用することが含まれます。この C# ヘルパー クラスはプロセスを簡素化します:

<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>
ログイン後にコピー

実装:

ConsoleEx クラスを使用して入力リダイレクトを確認します:

<code class="language-csharp">bool isInputRedirected = ConsoleEx.IsInputRedirected;</code>
ログイン後にコピー

方法 2: .NET 4.5 以降

.NET 4.5 以降のバージョンでは、Console クラス内に組み込みメソッドが提供されます。 新しいアプリケーションの場合は、次のアプローチが推奨されます:

  • Console.IsOutputRedirected
  • Console.IsInputRedirected
  • Console.IsErrorRedirected

これらは、リダイレクトのステータスを判断するためのより簡単かつ直接的な方法を提供します。 .NET Framework のバージョンに最も適した方法を選択してください。

以上がコンソール入力はリダイレクトされますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート