gpt4 book ai didi

c# - 无法使用 Directory.Delete(path, true) 删除目录

转载 作者:IT王子 更新时间:2023-10-29 03:27:52 24 4
gpt4 key购买 nike

我正在使用 .NET 3.5,尝试使用递归删除目录:

Directory.Delete(myPath, true);

我的理解是,如果文件正在使用或存在权限问题,这应该抛出,否则它应该删除目录及其所有内容。

但是,我偶尔会得到这个:

System.IO.IOException: The directory is not empty.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.Directory.DeleteHelper(String fullPath, String userPath, Boolean recursive)
at System.IO.Directory.Delete(String fullPath, String userPath, Boolean recursive)
...

我对这个方法有时会抛出错误并不感到惊讶,但我很惊讶在递归为真时收到这个特定的消息。 (我知道目录不是空的。)

我看到这个而不是 AccessViolationException 有什么原因吗?

最佳答案

编者注:虽然这个答案包含一些有用的信息,但实际上它对 Directory.Delete 的工作原理是不正确的。请阅读此答案的评论以及此问题的其他答案。


我以前遇到过这个问题。

问题的根源是这个函数不删除目录结构中的文件。因此,您需要做的是创建一个函数,先删除目录结构中的所有文件,然后再删除所有目录,然后再删除目录本身。我知道这违背了第二个参数,但这是一种更安全的方法。此外,您可能希望在删除文件之前立即从文件中删除只读访问属性。否则会引发异常。

只需将此代码添加到您的项目中即可。

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);
File.Delete(file);
}

foreach (string dir in dirs)
{
DeleteDirectory(dir);
}

Directory.Delete(target_dir, false);
}

此外,对我来说,我个人对允许删除的机器区域添加了限制,因为你希望有人在 C:\WINDOWS (%WinDir%) 上调用此函数还是C:\.

关于c# - 无法使用 Directory.Delete(path, true) 删除目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/329355/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com