C# 保持SafeFileHandle处于活动状态

C# 保持SafeFileHandle处于活动状态,c#,handle,C#,Handle,FileStream在释放或完成时关闭其底层句柄。如果将FileStream定义为函数中的局部变量,并且函数返回其SafeFileHandle,那么FileStream是否会被GC关闭,从而关闭句柄,或者我是否可以依赖句柄保持打开状态 我能做些什么来确保它保持开放 @HansPassant你的意思是文件流不会被GC’d,还是文件流不会在句柄上调用Close?哦,等等。必须在返回句柄的方法内调用DangerousAddRef(),以便FileStream终结器无法关闭该句柄。和相应的危险释放()完

FileStream在释放或完成时关闭其底层句柄。如果将FileStream定义为函数中的局部变量,并且函数返回其SafeFileHandle,那么FileStream是否会被GC关闭,从而关闭句柄,或者我是否可以依赖句柄保持打开状态


我能做些什么来确保它保持开放

@HansPassant你的意思是文件流不会被GC’d,还是文件流不会在句柄上调用Close?哦,等等。必须在返回句柄的方法内调用DangerousAddRef(),以便FileStream终结器无法关闭该句柄。和相应的危险释放()完成后。确保后一个方法始终被调用,属于finally块。@HansPassant,我删除了我的注释,因为我忘了提到他必须克隆SafeFileHandle,但它不符合允许的注释长度。因此,我删除了我的评论以重新编写…您可以首先获取/创建一个SafeFileHandle,通过名为DangerousAddRef method的合适的SafeFileHandle方法手动增加其引用计数。然后使用原始SafeFileHandle的实际句柄值创建SafeFileHandle的副本。SafeFileHandle的第二个副本正在传递给FileStream构造函数(当FileStream关闭时,第二个SafeFileHandle对象仍将被释放,但是基础文件句柄不会被销毁,因为它的引用计数以前已手动递增)。(续…)(…续。)关闭文件流后,您可以继续使用原始的SafeFileHandle。但请记住,在最终处理原始的SafeFileHandle之前,再次手动(通过同样恰当命名的SafeFileHandle方法DangerousRelease)减少其引用计数非常重要。正如方法名称所暗示的那样,这种方法充满了危险和风险,很容易出错。因此,我建议你不要这样做。。。