C# 如何使用c在打开某些文件时删除目录#

C# 如何使用c在打开某些文件时删除目录#,c#,C#,我必须删除根目录,但打开了一些文件,然后出现错误“进程无法访问该文件,因为它正被另一个进程使用” 因此,当某些文件处于打开模式时,如何删除目录(我知道在打开模式下使用for each loop单个文件删除,但我必须在没有for each loop的情况下删除目录)。您不能(至少在不关闭这些文件的情况下不能) 问题不在于C#程序,而在于Windows内核的一个严重限制:它无法删除打开(或锁定)的文件(因此不能删除目录,因为它现在不是空的) 您有两个选择: 使用诸如unlocker之类的机制强制关

我必须删除根目录,但打开了一些文件,然后出现错误“进程无法访问该文件,因为它正被另一个进程使用”

因此,当某些文件处于打开模式时,如何删除目录(我知道在打开模式下使用for each loop单个文件删除,但我必须在没有for each loop的情况下删除目录)。

您不能(至少在不关闭这些文件的情况下不能)

问题不在于C#程序,而在于Windows内核的一个严重限制:它无法删除打开(或锁定)的文件(因此不能删除目录,因为它现在不是空的)

您有两个选择:

  • 使用诸如unlocker之类的机制强制关闭文件,然后删除它们
  • 让打开文件的应用程序关闭文件,然后删除
编辑

由于您注释添加了由您自己的应用程序打开的文件的信息,因此事情变得更简单:

  • 关闭应用程序中的文件
  • 运行垃圾收集以确保文件句柄无效
  • 删除现在应该可以了

我找到了一个解决方案,每当打开一些文件并删除目录时,它就会被删除,但它只会给出一个抛出错误。因此,请使用try-catch块并忽略该错误

        try
        {
            Directory.Delete("path", true);
        }
        catch (IOException)
        {

        }

        finally
        {
            Directory.CreateDirectory("Path");
        }

将文件复制到其他地方,然后删除目录可能重复的@styx,这有助于删除使用过的文件吗?这仍然是不可能的;)@你可以关闭它,然后重新打开它。假设你打开了一个PDF文件,你想删除它的目录,你不能这样做,它来自Windows本身,为什么这是不同的?您希望最终删除打开的文件。如果它包含打开的文件,这实际上是一个不操作:将不会重新创建目录尝试,但旧的目录仍然存在。您可以在内部目录中创建多个目录。在目录和外部目录结束后,放入您的文件并写下这段代码。我已经在我的代码中完成了。。。。只要里面没有打开的文件,这就是OQ