【发布时间】:2012-10-05 11:31:10
【问题描述】:
我有一个类在构造函数中创建一个隐藏文件并保持其FileStream 处于打开状态,直到调用Dispose()。调用Dispose() 会关闭流并移除隐藏文件。
如果程序在没有调用Dispose() 的情况下关闭,我需要确保删除该文件。我想我可以检查它是否仍然存在并调用File.Delete(path) 如果它在析构函数中存在,但是在调用析构函数时已经可以收集保存文件路径的字符串字段,对吧?
有没有一种安全的方法可以从析构函数中访问该字段?
如果没有,我还有其他方法可以确保删除该文件吗?
【问题讨论】:
-
只需实现(完整的)IDisposable 模式,并在
Dispose(bool)方法中进行清理。您需要的数据仍然可用。 msdn.microsoft.com/en-us/library/system.idisposable.aspx -
@spender:您应该将此作为答案发布...
-
@spender:你是对的。我想如果
disposing为假,这意味着托管字段可能已经被收集,这就是析构函数调用Dispose(false)的原因,这是我提出这个问题的原因之一。在 Henk 的回答下查看我的评论。 -
确保您了解已收集和已处置之间的区别。它们在这里非常不同。
-
请澄清问题:“没有调用 Dispose()”的场景到底是什么?
标签: c# .net file destructor managed