【发布时间】:2018-07-26 20:44:41
【问题描述】:
我们的应用程序从外部设备收集数据。此数据主要驻留在内存中,但在用户显式保存数据之前,会以临时文件的形式假脱机到磁盘。这是为了在应用程序由于某种原因崩溃时提供一些恢复机会。一般来说,它工作得很好。
最近我们发现,由于 Windows 在自动更新方面变得更加强大,这些文件会在重新启动期间自动删除。因此,如果 Windows 终止我们的应用程序以自动应用更新,则允许恢复的临时文件会在重启后消失。
我已通过故意终止应用程序并重新启动来测试该问题;确实,重启后临时文件已经消失了。
文件是使用 Win32 API 调用 GetTempFileName 和 GetTempPath 创建的。我读到的关于这个主题的所有内容都表明这些文件不会自动删除,但它们显然正在被删除。
我能做些什么来阻止这种情况?还是我应该只更改我们的安全数据的存储位置?
【问题讨论】:
-
您创建了一个 临时 文件,现在要求它像永久文件一样工作。如果你想要一个永久文件,不要创建一个临时文件。
-
@IInspectable 你说得很对,我想我们正在扩展“临时”文件的概念。但它是暂时的,因为它只有在出现严重错误的情况下才会出现,我仍然希望看到一些解释自动删除的文档;到目前为止,我还没有找到。
-
不要将它们存储在
GetTempFileName中,而是将它们存储在 LocalAppdata 中的某个位置。使用SHGetFolderPath 检索LocalAppData 的位置。 -
如果临时文件仅在重新启动时被删除,而不仅仅是在程序关闭时被删除,这意味着可能有关于此挂起操作的数据存储在某处(例如注册表)。重新测试,但在重新启动之前,请检查 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations 并查看您的临时文件是否存在...
标签: windows winapi temporary-files