.NET 3.5 中的递归目录删除问题排查
在 .NET 3.5 中使用 Directory.Delete(path, true)
时出现的常见错误“System.IO.IOException:目录不为空”具有误导性。 true
参数表示递归删除,但它不会自动处理目录内的文件。
要可靠地递归删除目录及其内容,需要自定义函数:
<code class="language-csharp">public static void DeleteDirectoryRecursively(string targetDir) { string[] files = Directory.GetFiles(targetDir); string[] dirs = Directory.GetDirectories(targetDir); foreach (string file in files) { File.SetAttributes(file, FileAttributes.Normal); // Remove read-only attributes File.Delete(file); } foreach (string dir in dirs) { DeleteDirectoryRecursively(dir); // Recursive call for subdirectories } Directory.Delete(targetDir, false); // Delete the directory itself }</code>
这种改进的方法首先从文件中删除所有只读属性,然后单独删除每个文件。 它在最终删除目标目录之前递归地调用自身来处理嵌套子目录。 这确保了完整且无错误的删除。 建议实施访问限制,以防止意外删除受系统保护的文件夹。
以上是为什么 Directory.Delete(path, true) 失败,以及如何在 .NET 3.5 中递归删除目录?的详细内容。更多信息请关注PHP中文网其他相关文章!