首頁 >後端開發 >C++ >使用 Directory.GetFiles 時如何處理 UnauthorizedAccessException?

使用 Directory.GetFiles 時如何處理 UnauthorizedAccessException?

Susan Sarandon
Susan Sarandon原創
2025-01-07 15:18:40703瀏覽

How Can I Handle UnauthorizedAccessException When Using Directory.GetFiles?

Directory.GetFiles 方法因存取限制引發的異常

在存取網路檔案系統或受控環境中的檔案系統時,您可能會遇到某些資料夾限制存取的情況。這會導致諸如 Directory.GetFiles 之類的方法拋出異常,中斷程式的執行。

問題分析

當 Directory.GetFiles 方法遇到無法存取的目錄時,會拋出 UnauthorizedAccessException 例外。不幸的是,在捕獲此異常之前,該方法已經失敗並且無法恢復。

解:逐一探測目錄

為了解決這個問題,建議一次探測一個目錄,而不是對整個目錄樹進行遞歸搜尋。這樣,您可以針對每個目錄捕獲和處理異常,避免程式過早終止。

範例實作

以下是一個範例方法,該方法迭代遍歷目錄樹並將檔案路徑新增至清單中,排除來自拒絕存取目錄的檔案:

<code class="language-csharp">private static void AddFiles(string path, IList<string> files)
{
    try
    {
        foreach (string file in Directory.GetFiles(path))
        {
            files.Add(file);
        }

        foreach (string subdirectory in Directory.GetDirectories(path))
        {
            AddFiles(subdirectory, files);
        }
    }
    catch (UnauthorizedAccessException ex)
    {
        // 忽略无法访问的目录,继续处理其他目录
    }
}</code>

此方法可確保即使遇到沒有存取權限的目錄,程式也能繼續執行,從而允許您處理有存取權限的目錄中的檔案。 此改進版本避免了使用 ToList().ForEach(),改用更清晰易讀的 foreach 循環,提高了程式碼的可維護性。

以上是使用 Directory.GetFiles 時如何處理 UnauthorizedAccessException?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn