C# 目录。删除运行到IOException

C# 目录。删除运行到IOException,c#,C#,我用C#创建了一个shell脚本,用于删除服务器上的Windows home文件夹。主文件夹由文本文件提供。脚本循环遍历文件夹并删除它们。我有两个日志文件“成功”日志和“错误”日志 删除部分如下所示: if (Directory.Exists(serverShare + "\\" + user)) { try { Directory.Delete(serverShare + "\\" + user, true);

我用C#创建了一个shell脚本,用于删除服务器上的Windows home文件夹。主文件夹由文本文件提供。脚本循环遍历文件夹并删除它们。我有两个日志文件“成功”日志和“错误”日志

删除部分如下所示:

if (Directory.Exists(serverShare + "\\" + user))
{
       try
       {
               Directory.Delete(serverShare + "\\" + user, true);
               successLog.WriteLine(serverShare + "\\" + user + " --- deleted");
       }
       catch (Exception ex)
       {
               errorLog.WriteLine(serverShare + "\\" + user + " --- Error: {0}", ex.ToString());
       }
}
else
{
      errorLog.WriteLine(serverShare + "\\" + user + " -- Errror: Directory not exists!");
}
现在我遇到了一个例外:

“System.IO.IOException:进程无法访问该文件,因为它 正在被另一个进程使用。目录。删除图片 文件”

该文件夹未被使用(访问它的用户不再在公司工作),因此其他进程无法访问它

文件夹
my documents\my music
my documents\my pictures
出现异常。所以它可以用特殊的Windows文件夹做些什么


其他文件夹将被删除。所以剧本“起作用了”。本地环境也没有问题。

您可以手动删除该文件夹吗

您可以使用此
Process explorer
获取锁定文件名。

或者你可以把

GC.Collect(); 
Directory.Delete(serverShare + "\\" + user, true);

我已经解决了这个问题。某些(系统)文件夹具有存档或只读标志。似乎Directory.Delete(使用递归子文件夹删除)无法删除这些文件夹。因此,您必须首先删除这些属性。 删除方法:

    public static void ClearAttributes(string currentDir)
    {
        if (Directory.Exists(currentDir))
        {
            File.SetAttributes(currentDir, FileAttributes.Normal);

            string[] subDirs = Directory.GetDirectories(currentDir);
            foreach (string dir in subDirs)
            {
                ClearAttributes(dir);
            }

            string[] files = files = Directory.GetFiles(currentDir);
            foreach (string file in files)
            {
                File.SetAttributes(file, FileAttributes.Normal);
            }    
        }
    }
然后,在Directory.Delete之前运行此方法

ClearAttributes(serverShare + "\\" + user);
Directory.Delete(serverShare + "\\" + user, true);

因此,它工作正常,所有文件夹都被删除。

这些错误消息具有误导性,因为“另一个进程”实际上是您自己的进程。您是否以任何方式在代码的任何其他部分中访问这些目录/文件?如果是,请检查是否需要/正在处置对象。可能是权限问题,请尝试并检查“运行”脚本的用户是否可以编辑您尝试删除的文件夹。也可能是类似于防病毒产品的内容否,我不访问这些目录/文件。我只是创建日志文件,然后像我打印的代码一样删除文件夹。没有防病毒活动。当我删除文件夹手册(使用与应用程序运行相同的用户)时,它可以工作,但我必须确认另一条消息“此文件夹与其他人共享”。不要GC。在不知道它的功能的情况下收集,将其到处散布是一件好事是的,手动删除可以工作。但我必须确认另一条消息“此文件夹与其他人共享”。我同意你的评论@Julien,但process explorer的建议是一个好建议。Scott Hanselman对使用此工具识别问题有着独特的见解。在OPs实例中可以很方便地确定问题的确切原因。我不知道process explorer应该如何提供帮助。当我手动删除文件夹时,它会工作。所以这应该让我感到惊讶:它没有进程谁来锁定它?你认为我错了吗?