我在ASP.NET的Web应用程序中有一个按钮,当它被推送时,我只是删除文件夹的内容,并将一些新的新内容从另一个文件夹复制粘贴到它。这两个文件夹都是此应用程序根目录的子项,所有人组具有对此文件夹的完全访问权限(仅用于测试目的)。要删除目标文件夹的文件和文件夹,我使用Directory.Delete
方法,并在删除之前将每个文件的属性恢复正常,这意味着删除时没有文件是只读的或受保护的。这很顺利。但是当有人按顺序按下该按钮时(在不到15秒左右),第二次抛出异常并显示“目录不为空”。我该怎么办?我不这样做知道问题所在。我认为它应该与操作系统的IO相关(在我的例子中是Windows)。
答案 0 :(得分:1)
使用重载方法Directory.Delete(directoryToDelete, true);
看看this method。
它说
删除指定的目录, 如果指示,任何子目录和 目录中的文件。
Directory.Delete
方法you are using要求目录为空。
<强>更新强>
此问题在此之前提出。
答案 1 :(得分:0)
我发现了问题。我试图删除只读文件夹。不幸的是,似乎.NET不足以显示相关消息。
但是,在复制,移动或删除任何文件或文件夹之前,请将其属性设置为正常:
File.SetAttributes(filePath, FileAttributes.Normal);
答案 2 :(得分:0)
我认为Directory.Delete(String,Boolean)在完成删除之前返回。
我已经使用下面的代码来刷新目录,Sleep(100)肯定会偶尔被击中,但很少在第一次调用时出现(对应于你的描述“在重复操作中特别(原文如此)”)。 / p>
String destination = Path.Combine(targetFolder, Name);
if (Directory.Exists(destination))
{
Directory.Delete(destination, true);
Int32 i = 0;
while(Directory.Exists(destination))
{
System.Threading.Thread.Sleep(100);
if (i++ > 50) { throw new Exception("Failed to remove " + destination); }
}
}
Directory.CreateDirectory(destination);