删除目录返回对路径的访问被拒绝

时间:2016-05-17 01:17:55

标签: c# io directory

我有代码查找超过1小时的空目录并删除它们

foreach (DirectoryInfo __dir in _directories)
{
    if (!__dir.EnumerateFiles().Any() && __dir.LastWriteTime < DateTime.Now.AddHours(-1))
    {
        Directory.Delete(__dir.FullName)
    }
}

抛出异常,表示拒绝访问目录路径。但是,我可以通过文件浏览器手动删除同一目录 我尝试了其他人的建议(将属性设置为正常),但这不起作用。

我尝试FileAttributes.Normal;~FileAttributes.ReadOnly;他们都没有工作。
我还尝试将访问控制设置为完全控制我正在尝试删除的目录以及它的父目录。

3 个答案:

答案 0 :(得分:1)

如果上面发布的程序无法删除目录,但您可以手动进行权限问题,因为手动记录的是管理员,但应用程序未在管理员权限下运行:

  • 对于控制台/ UI应用程序,Visual studio / exe在较小的权限下运行,在管理员权限下打开visual studio或以管理员身份运行exe,它应该能够达到目的
  • 对于ASP.Net Web应用程序,它将在上下文中运行 IIS用户,签出用户和组,提供权限 用户在目录上。

答案 1 :(得分:0)

如果FileAttributes.Normal;没有做到这一点(它应该),请尝试将属性设置为ReadOnly:

foreach (DirectoryInfo __dir in _directories)
{
    if (!__dir.EnumerateFiles().Any() && __dir.LastWriteTime < DateTime.Now.AddHours(-1))
    {
       __dir.Attributes = dir.Attributes & ~FileAttributes.ReadOnly;
       __dir.Delete();
    }
}

另请注意,这会使用__dir来删除自己而不是Directory.Delete(__dir.FullName),它应该没有区别,只是简写。

答案 2 :(得分:0)

除了其他建议之外,如果您要删除的目录(例如:在目录中读取或写入文件),请确保您的程序没有“做某事”。 ...