System.IO的Directory.Delete方法有时可以工作,但有时(特别是在重复操作中)说“目录不是空的”

时间:2011-06-27 08:28:54

标签: asp.net io filesystems

我在ASP.NET的Web应用程序中有一个按钮,当它被推送时,我只是删除文件夹的内容,并将一些新的新内容从另一个文件夹复制粘贴到它。这两个文件夹都是此应用程序根目录的子项,所有人组具有对此文件夹的完全访问权限(仅用于测试目的)。要删除目标文件夹的文件和文件夹,我使用Directory.Delete方法,并在删除之前将每个文件的属性恢复正常,这意味着删除时没有文件是只读的或受保护的。这很顺利。但是当有人按顺序按下该按钮时(在不到15秒左右),第二次抛出异常并显示“目录不为空”。我该怎么办?我不这样做知道问题所在。我认为它应该与操作系统的IO相关(在我的例子中是Windows)。

3 个答案:

答案 0 :(得分:1)

使用重载方法Directory.Delete(directoryToDelete, true);

看看this method

它说

  

删除指定的目录,   如果指示,任何子目录和   目录中的文件。

Directory.Delete方法you are using要求目录为空。

<强>更新

此问题在此之前提出。

Cannot delete directory with Directory.Delete(path, true)

答案 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);