我有一个代表文档的类(GH_Document)。 GH_Document上有一个AutoSave方法,在每个有潜在危险的操作之前调用它。此方法在原始文件旁边创建(或覆盖)AutoSave文件。
GH_Document还包含一个名为DestroyAutoSaveFiles()的方法,该方法从磁盘中删除AutoSave函数创建的所有文件。当应用程序关闭时,以及文档卸载时,我会在文档上调用此方法。但是,由于AutoSave文件在成功关闭后仍然存在,因此我似乎错过了一些案例。
所以这让我思考。处理这种情况的最佳方法是什么?我应该追踪文档消失的所有可能方式,并在任何地方添加自动保存清理逻辑吗?或者我应该在GH_Document.Dispose()中实现IDisposable并执行清理?或者我应该在GH_Document.Finalize()?
中这样做我希望自动保存文件保留在磁盘上的唯一时间是应用程序崩溃。是否发生Dispose和Finalize保证在发生崩溃时不被调用?
答案 0 :(得分:1)
如果发生崩溃,是否保证Dispose和Finalize不被调用?
一般来说,不,虽然这取决于您的应用程序如何崩溃。在C#中,它通常是未捕获异常传播到顶层的结果。在这种情况下,任何finally子句都将在堆栈的上行执行,包括从using语句中释放调用。
如果应用程序突然终止(例如在任务管理器中将其终止),则不会调用finally子句,但您不应该依赖此行为。
一个简单的解决方案是将您的自动保存文件放在具有特殊命名约定的隐藏目录中,并在成功关闭时删除该目录中的所有自动保存文件。