優雅地處理Directory.GetFiles()中的文件和文件夾權限問題
使用Directory.GetFiles()
枚舉目錄中的文件時,如果遇到受保護的文件夾或文件,可能會遇到障礙。這可能會導致文件列表過程因異常而突然停止。但是,如果您想優雅地忽略這些受限項並繼續遍歷可訪問的文件,該怎麼辦?
關鍵在於放棄AllDirectories
參數並手動處理遞歸。通過單獨檢查每個子目錄,您可以更精細地控制該過程。
請考慮以下代碼片段:
<code class="language-csharp">using System; using System.IO; static class Program { static void Main() { string path = ""; // TODO ApplyAllFiles(path, ProcessFile); } static void ProcessFile(string path) {/* ... */} static void ApplyAllFiles(string folder, Action<string> fileAction) { try { foreach (string file in Directory.GetFiles(folder)) { fileAction(file); } } catch (UnauthorizedAccessException) { // 处理异常 } catch (Exception ex) { // 处理其他异常 } foreach (string subDir in Directory.GetDirectories(folder)) { try { ApplyAllFiles(subDir, fileAction); } catch (UnauthorizedAccessException) { // 处理异常,例如记录错误信息或忽略 } catch (Exception ex) { // 处理其他潜在异常 } } } }</code>
在此代碼中,我們使用委託(Action<string>
)來指定對找到的每個文件執行的操作。 ApplyAllFiles()
方法遞歸地探索子目錄,捕獲任何UnauthorizedAccessException
並繼續其探索。
通過手動管理遞歸,您可以有效地繞過不可訪問的文件夾或文件,確保僅處理授權的項目,而不會中斷您的文件列表操作。 改進後的代碼對Directory.GetFiles
也進行了異常處理,確保更健壯的程序。
以上是使用Directory.getFiles()時,如何忽略權限錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!