File.Delete()循环时不时地挂起

时间:2016-05-03 06:20:30

标签: c# delete-file

所以我有一个应用程序,需要一次清空所有文件的目录。它拍摄照片并将它们放在一个文件夹中。由于我不想处理现有的文件逻辑,我更喜欢在进行捕获之前清空文件夹。 所以很自然地,在那一点上我称之为一种方法。 这是我的方法:

private void emptyMyFolder()
{
    DirectoryInfo di = new DirectoryInfo(textBox1.Text + @"\my\rest\of\the\path\here\");
    foreach (FileInfo file in di.GetFiles())
    {
        file.Delete();
    }
}

它运作得很好。除了,时不时地,这种方法会持续很长时间。 我在onClick按钮中移动了方法调用,以隔离它并排除其他可能的因素。而且,此方法调用有时会挂起,应用程序也会无响应。

奇怪的是,如果在应用程序没有响应时,我使用Windows资源管理器导航到需要清空的文件夹,我看到那里的大部分文件...我全部选中它们,并尝试删除他们手动...但在点击删除后,Windows本身等待5-10秒,然后它告诉我我要删除的文件不存在(因为很明显,我的无响应应用程序中的进程成功删除它们) 。是的,在Windows告诉我之后,我可以看到该文件夹​​是空的,我的应用程序变得响应。

有时,如果我不使用资源管理器尝试手动强制删除文件,我的应用程序会挂起几分钟......而且每次该文件夹中只有35-38个文件。每个文件的文件大小最大为700kB。所以它不应该是任何问题。 而且,有时候,这种方法调用只需要几分之一秒......

我使用Windows 10进行开发,我的应用程序是使用VisualStudio 2015社区制作的。该应用程序也使用Windows 10 ...

部署到另一台计算机上

任何人都可以帮我解决这个问题吗?

我宁愿不尝试使用BAT脚本文件删除文件夹内容......

1 个答案:

答案 0 :(得分:0)

Directory.Delete(path, true)怎么样,你不必迭代文件。此外,在每次迭代期间可能会调用di.GetFiles()。如果要使用循环删除文件,请先将其捕捉到列表中:var files = di.GetFiles().ToList();现在它不会尝试在每次迭代期间找出可能导致锁定的文件列表。