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

时间:2011-01-20 20:49:07

标签: c# file

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

有没有办法检测进程打开的文件然后全部关闭?

2 个答案:

答案 0 :(得分:4)

您应该将文件放在using块中,以便即使抛出异常它们也会被关闭。

答案 1 :(得分:1)

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

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

以下是一些枚举进程所有句柄的示例代码:http://nopaste.info/58d1aed48f.html您只能将它们过滤到文件句柄。