C# 目录。删除运行到IOException
我用C#创建了一个shell脚本,用于删除服务器上的Windows home文件夹。主文件夹由文本文件提供。脚本循环遍历文件夹并删除它们。我有两个日志文件“成功”日志和“错误”日志 删除部分如下所示:C# 目录。删除运行到IOException,c#,C#,我用C#创建了一个shell脚本,用于删除服务器上的Windows home文件夹。主文件夹由文本文件提供。脚本循环遍历文件夹并删除它们。我有两个日志文件“成功”日志和“错误”日志 删除部分如下所示: if (Directory.Exists(serverShare + "\\" + user)) { try { Directory.Delete(serverShare + "\\" + user, true);
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应该如何提供帮助。当我手动删除文件夹时,它会工作。所以这应该让我感到惊讶:它没有进程谁来锁定它?你认为我错了吗?