コンソール入力リダイレクトの検出
多くのコンソール アプリケーションは、入力がキーボードからのものかファイルからのものかに応じて動作を調整する必要があります。 この記事では、これらの入力ソースを確実に区別する方法を説明します。
方法 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 サイトの他の関連記事を参照してください。