首頁 > 後端開發 > C++ > 如何偵測 C# 控制台應用程式中的輸入重定向?

如何偵測 C# 控制台應用程式中的輸入重定向?

DDD
發布: 2025-01-12 17:01:47
原創
179 人瀏覽過

How Can I Detect Input Redirection in C# Console Applications?

掌握 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板