【问题标题】:Can't delete folders in User's folder recursively. 'System.UnauthorizedAccessException' occurred in mscorlib.dll无法递归删除用户文件夹中的文件夹。 mscorlib.dll 中发生“System.UnauthorizedAccessException”
【发布时间】:2014-10-13 02:35:29
【问题描述】:

我正在尝试删除每个包含用户“用户名”的文件夹,其内容位于 C:\Users\User 中,如下所示:

    foreach (var subdir in directory.GetDirectories().Where(subdir => subdir.Name.ToLower().Contains(Environment.UserName))) {
        try {
            Directory.Delete(subdir.FullName, true);
        } catch (Exception exception) {
            Console.Write("Deleting " + subdir.FullName + " caused exception: \n" + exception);
        }
    }

当我尝试运行 Windows 窗体二进制文件时,当遇到前几个文件时,我在 mscorlib.dll 中出现“System.UnauthorizedAccessException”错误。事情就是这样,我以管理员身份运行它,我可以在资源管理器中删除这些文件而不会出现问题(甚至是 UAC 提示),并且没有进程锁定/使用这些文件。

发生了什么事?

【问题讨论】:

  • 这是一个 Windows 或一个 Web 应用程序,如果您从 Web 运行它,那么 IIS_USER 需要与您在用户帐户下相同的读/写权限
  • 对不起,这是一个 Windows 窗体应用程序。编辑:DJ Craze 是一个很棒的 DJ。不确定您的用户名是否在向他致敬。
  • 我是一名 DJ,我很高兴你能不分昼夜地认识到我的才华..LOL
  • 你调试过这个吗?当您第一次通过 foreach 循环时,subdir 的值是多少,您确定您没有尝试删除整个 Directory 与 FilePath + FileName..?
  • 是否有任何文件是只读的? Directory.Delete 不允许这样做

标签: c# .net windows winforms file


【解决方案1】:

为这个调用交换 directory.delete

//Directory.Delete alternative
public void DeleteDirectory(string targetDir)
{
    File.SetAttributes(targetDir, FileAttributes.Normal);

    string[] files = Directory.GetFiles(targetDir);
    string[] dirs = Directory.GetDirectories(targetDir);

    foreach (string file in files)
    {
        File.SetAttributes(file, FileAttributes.Normal);
        File.Delete(file);
    }

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

    Directory.Delete(targetDir, false);
}

【讨论】:

  • 那行得通。知道为什么 Directory.Delete() 没有?
  • 只读或其他文件属性 - 所有这些都是首先删除它们(File.SetAttributes)。是不是能够剥离属性然后做同样的事情!
  • 好吧,公平地说,它确实在文档here 中这样说,它会在只读文件上引发异常。
  • 这可能是由于一个名为“thumb.db”的隐藏文件。查看我的帖子了解更多详情:)
【解决方案2】:

实际上发生这种情况还有另一个原因:在目录中,您可能有一个名为“Thumb.db”的隐藏文件,其中包含所有文件的缩略图信息。有时,除非您通过任务管理器终止 explorer.exe 或关闭计算机,否则此文件不会关闭,并导致“不可删除”文件夹。

要摆脱这个烦人的部分,请按照说明进行操作 here :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-18
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多