0

我有一个代表文档的类(GH_Document)。GH_Document 上有一个 AutoSave 方法,该方法在每次潜在危险操作之前调用。此方法在原始文件旁边创建(或覆盖)一个 AutoSave 文件。

GH_Document 还包含一个名为 DestroyAutoSaveFiles() 的方法,该方法从磁盘中删除由 AutoSave 函数创建的所有文件。当应用程序关闭时,我在文档上调用此方法,以及当文档被卸载时。但是,我似乎错过了一些案例,因为在一些成功关闭后自动保存文件仍然存在。

所以这让我开始思考。处理这种情况的最佳方法是什么?我是否应该追踪文档消失的所有可能方式并在各处添加自动保存清理逻辑?或者我应该实现 IDisposable 并在 GH_Document.Dispose() 中执行清理?或者我应该在 GH_Document.Finalize() 中这样做吗?

我希望自动保存文件保留在磁盘上的唯一一次是应用程序崩溃时。是否保证在发生崩溃时不会调用 Dispose 和 Finalize?

4

1 回答 1

1

是否保证在发生崩溃时不会调用 Dispose 和 Finalize?

一般来说,不会,尽管这取决于您的应用程序如何崩溃。在 C# 中,它通常是传播到顶层的未捕获异常的结果。在这种情况下,任何 finally 子句都将在堆栈向上的过程中执行,其中包括来自 using 语句的 Dispose 调用。

如果应用程序突然终止(例如通过在任务管理器中终止它),finally 子句将不会被调用,但您不应依赖此行为。

一个简单的解决方案是将您的自动保存文件放在具有特殊命名约定的隐藏目录中,并在成功关闭时删除该目录中的所有自动保存文件。

于 2009-11-23T13:25:06.300 回答