C# コンソール アプリケーションでの入力リダイレクト検出のマスター
多くの C# コンソール アプリケーションでは、ユーザー入力がキーボードから発生するか、ファイルなどのリダイレクトされたソースから発生するかに応じて、異なる動作が必要になります。このガイドは、入力リダイレクトを検出するための堅牢なソリューションを提供します。
課題を理解する
コンソール アプリケーションは多くの場合、入力ソースに基づいて機能を適応させる必要があります。 この適応性を実現するには、入力がキーボードからのものなのか、外部ファイルからのものなのかを判断することが重要です。
効果的な解決策
最も信頼性の高い方法は、P/Invoke 経由で Windows FileType()
API 関数を使用します。この関数は、ファイル ハンドルに関連付けられたファイルのタイプを識別します。 以下の ConsoleEx
ヘルパー クラスはこれを示しています。
<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>
実際の応用
入力リダイレクトを確認するには、単に次のように使用します。
<code class="language-csharp">bool isInputRedirected = ConsoleEx.IsInputRedirected;</code>
最新の .NET アプローチ
.NET Framework 4.5 以降のバージョンでは、Console
クラス内でこの機能のサポートが組み込まれています。 IsInputRedirected
プロパティは、直接的で簡単な解決策を提供します。
<code class="language-csharp">bool isInputRedirected = Console.IsInputRedirected;</code>
これらの手法を使用すると、入力リダイレクトを効果的に検出し、より柔軟で堅牢なコンソール アプリケーションを作成できます。
以上がC# コンソール アプリケーションで入力リダイレクトを検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。