我在C#中创建了一个shell脚本,用于删除服务器上的Windows主文件夹。主文件夹由文本文件给出。该脚本循环通过文件夹并删除它们。我有两个日志文件“成功”-log和“错误”-log。
删除部分如下:
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:进程无法访问该文件,因为它 正在被另一个进程使用。 directory.delete图片 文档”。
该文件夹未被使用(访问该文件夹的用户不再在公司工作),因此没有其他进程可以访问该文件夹。
文件夹my documents\my music
,my documents\my pictures
发生异常。那么它可以用特殊的Windows文件夹做点什么吗?
删除其他文件夹。所以脚本“有效”。在当地环境中也没有问题。
答案 0 :(得分:0)
您可以手动删除文件夹吗?
您可以使用此Process explorer
来获取锁定文件名。
https://technet.microsoft.com/en-sg/sysinternals/bb896653.aspx
或者你可以把
GC.Collect();
Directory.Delete(serverShare + "\\" + user, true);
答案 1 :(得分:0)
我已经解决了这个问题。某些(系统)文件夹具有Archive或ReadOnly标志。看来Directory.Delete(带有递归子文件夹删除)无法删除这些文件夹。所以你必须先删除这些属性。 删除mehtod:
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);
所以它工作正常,所有文件夹都被删除。