Directory.Delete(path, true)
有時會失敗並顯示「目錄不為空」? 使用 Directory.Delete(myPath, true)
進行遞迴目錄刪除可能會引發 System.IO.IOException: The directory is not empty
異常。這是違反直覺的,特別是當指定 true
(遞歸刪除)時。 預期該方法只會因檔案存取問題或權限問題而失敗,而不僅僅是因為目錄不為空。
核心問題是,即使啟用了遞歸,Directory.Delete
本身也不會刪除目錄結構中的 檔案。 為了防止資料遺失,它會優先刪除目錄並跳過檔案刪除。
要可靠地刪除目錄及其內容,需要自訂函數。這個函數應該:
此方法可確保在嘗試刪除主目錄之前完整且安全地刪除所有檔案和子資料夾。
為了增強安全性,限制可以刪除的目錄。 將刪除限製到特定檔案系統位置可防止意外或惡意刪除關鍵資料。
以下函數示範了遞歸目錄刪除:
<code class="language-csharp">public static void DeleteDirectory(string target_dir) { string[] files = Directory.GetFiles(target_dir); string[] dirs = Directory.GetDirectories(target_dir); foreach (string file in files) { File.SetAttributes(file, FileAttributes.Normal); // Remove read-only attribute File.Delete(file); } foreach (string dir in dirs) { DeleteDirectory(dir); // Recursive call for subdirectories } Directory.Delete(target_dir, false); // Delete the directory itself (non-recursive) }</code>
這個改進的函數解決了內建Directory.Delete
方法的局限性,為遞歸目錄刪除提供了更可靠、更安全的解決方案。
以上是為什麼即使啟用了遞歸刪除,「Directory.Delete(path, true)」有時也會失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!