Directory.Delete不起作用.访问被拒绝错误但在Windows资源管理器下它没关系

bin*_*all 15 c#

我搜索了SO但却一无所获.

为什么这不起作用?

Directory.Delete(@"E:\3\{90120000-001A-0000-0000-0000000FF1CE}-C");
Run Code Online (Sandbox Code Playgroud)

上面的行将抛出异常"访问被拒绝".我有管理员权限,我可以用资源管理器删除目录.

它看起来像一些禁止的字符?但Windows资源管理器可以处理它.如何删除名称相似的目录?

bin*_*all 24

谢谢大家的意见,它帮助我快速找到解决方案.

正如Phil提到"Directory.Delete失败,如果是,无论权限如何(参见msdn.microsoft.com/en-us/library/...的底部)"

此外,无法从文件夹中删除只读属性 Microsoft说:

您可能无法使用Windows资源管理器从文件夹中删除只读属性.此外,当您尝试将文件保存到文件夹时,某些程序可能会显示错误消息.

结论:在删除之前,始终删除所有dir,文件属性不同于Normal.所以下面的代码解决了问题:

System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(@"E:\3\{90120000-0021-0000-0000-0000000FF1CE}-C1");

if (dir.Exists)
{
    setAttributesNormal(dir);
    dir.Delete(true);
}

. . .

function setAttributesNormal(DirectoryInfo dir) {
    foreach (var subDir in dir.GetDirectories())
        setAttributesNormal(subDir);
    foreach (var file in dir.GetFiles())
    {
        file.Attributes = FileAttributes.Normal;
    }
}
Run Code Online (Sandbox Code Playgroud)


Chu*_*uck 5

我使用了binball的代码并添加了一行来将目录属性设置为normal.

if (dir.Exists)
    {
        setAttributesNormal(dir);
        dir.Delete(true);
    }    

function setAttributesNormal(DirectoryInfo dir)
    {
        foreach (var subDir in dir.GetDirectories())
        {
            setAttributesNormal(subDir);
            subDir.Attributes = FileAttributes.Normal;
        }
        foreach (var file in dir.GetFiles())
        {
            file.Attributes = FileAttributes.Normal;
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 成功!当我在“setAttributesNormal”函数末尾添加以下行时:“dir.Attributes = FileAttribute.Normal”。该函数缺少主(父)目录。 (3认同)