C# 用C关闭所有打开的文件句柄

C# 用C关闭所有打开的文件句柄,c#,file,C#,File,我在SpecFlow之上构建了一个集成/回归测试套件,它在下面使用NUnit。我遇到的问题是,有时测试中会出现异常,并且文件可能会保持打开状态。这是后续测试中的一个问题,因为它们无法读取/写入此文件 是否有一种方法可以检测进程打开了哪些文件,然后将其全部关闭?您应该将文件放入using块中,这样即使引发异常,它们也会关闭。您应该通过使用using子句处理句柄或等待终结器来关闭句柄。终结器可能不适合您,因为它们可能不会在下一次测试之前运行。因此,用try…finally或using来处理它们是一种

我在SpecFlow之上构建了一个集成/回归测试套件,它在下面使用NUnit。我遇到的问题是,有时测试中会出现异常,并且文件可能会保持打开状态。这是后续测试中的一个问题,因为它们无法读取/写入此文件


是否有一种方法可以检测进程打开了哪些文件,然后将其全部关闭?

您应该将文件放入using块中,这样即使引发异常,它们也会关闭。

您应该通过使用using子句处理句柄或等待终结器来关闭句柄。终结器可能不适合您,因为它们可能不会在下一次测试之前运行。因此,用try…finally或using来处理它们是一种方法

虽然可以枚举句柄并关闭它们,但不应该这样做。此后,句柄可能会关闭两次,这将导致未定义的行为和崩溃


下面是一些枚举进程所有句柄的示例代码:您可以将它们筛选为仅文件句柄。

是的,您可以通过打开文件来检测它。你会得到一个例外。不支持,不支持关闭另一进程拥有的文件,Windows会接受不让任何人乱动文件的请求。停止这个过程。我知道如何使用语句,我通常也会使用它们,但有时使用块是没有意义的。在这种情况下我该怎么办?@Jeffrey:这取决于情况。谢谢,这正是我想要的。nopaste.info链接已经失效了。