0

我使用 C# 上的过程复制了一些目录/文件。现在,我想删除主目录。

所以这是基本代码:

dir.Delete(true);

但我认为UnauthorizedAccessException(访问目录.acrodata,这是一个文件,被拒绝)。

为什么?我怎么能强迫它?

4

5 回答 5

6

您可能要么 1)那里的安全权限有限,无法删除文件,要么 2)有一个文件或目录的句柄仍然打开(正在使用),这会阻止您删除。

Directory.Delete(string);

http://msdn.microsoft.com/en-us/library/62t64db3.aspx

未授权访问异常

调用者没有所需的权限。

于 2013-04-19T14:06:47.417 回答
1

首先,您应该将您拥有的所有句柄从要删除的文件中处理掉。然后您可以使用以下代码来确保只读文件也被删除:

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 主题中的来源和更多信息。

于 2013-04-19T14:18:29.000 回答
0

您尝试删除的目录可能是只读的。因此,将 ReadOnly 属性设置为 false 并删除它会起作用。

例如:

var di = new DirectoryInfo("SomeFolder");
di.Attributes &= ~FileAttributes.ReadOnly;
于 2013-04-19T14:09:50.900 回答
0

我猜想在您的复制操作之后,您未能正确关闭 Streams,这意味着您仍然持有@bland 所述的文件句柄。

确保您及时处理您的 IDisposable,这个问题很可能会消失。

于 2013-04-19T14:10:34.400 回答
0

您是否尝试过仅使用

Directory.Delete(folderName, true);

那应该递归删除?

于 2021-10-10T23:13:23.180 回答