我使用 C# 上的过程复制了一些目录/文件。现在,我想删除主目录。
所以这是基本代码:
dir.Delete(true);
但我认为UnauthorizedAccessException
(访问目录.acrodata,这是一个文件,被拒绝)。
为什么?我怎么能强迫它?
您可能要么 1)那里的安全权限有限,无法删除文件,要么 2)有一个文件或目录的句柄仍然打开(正在使用),这会阻止您删除。
Directory.Delete(string);
http://msdn.microsoft.com/en-us/library/62t64db3.aspx
未授权访问异常
调用者没有所需的权限。
首先,您应该将您拥有的所有句柄从要删除的文件中处理掉。然后您可以使用以下代码来确保只读文件也被删除:
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);
}
此 Stackoverflow 主题中的来源和更多信息。
您尝试删除的目录可能是只读的。因此,将 ReadOnly 属性设置为 false 并删除它会起作用。
例如:
var di = new DirectoryInfo("SomeFolder");
di.Attributes &= ~FileAttributes.ReadOnly;
我猜想在您的复制操作之后,您未能正确关闭 Streams,这意味着您仍然持有@bland 所述的文件句柄。
确保您及时处理您的 IDisposable,这个问题很可能会消失。
您是否尝试过仅使用
Directory.Delete(folderName, true);
那应该递归删除?