首页 > 解决方案 > 如何防止使用 GetTempFileName 创建的文件在重新启动时被自动删除

问题描述

我们的应用程序从外部设备收集数据。此数据主要驻留在内存中,但在用户明确保存数据之前,会以临时文件的形式假脱机到磁盘。这是为了在应用程序由于某种原因崩溃时提供一些恢复机会。一般来说,它工作得很好。

最近我们发现,由于 Windows 在自动更新方面变得更加强大,这些文件在重新启动期间会自动删除。因此,如果 Windows 终止我们的应用程序以自动应用更新,则允许恢复的临时文件在重新启动后消失。

我已经通过故意杀死应用程序并重新启动来测试这个问题;实际上,重新启动后临时文件已经消失。

这些文件是使用 Win32 API 调用GetTempFileName以及GetTempPath. 我读过的关于这个主题的所有内容都说这些文件永远不会自动删除,但它们显然正在被删除。

我能做些什么来阻止这种情况?还是我应该改变我们的安全数据的存储位置?

标签: windowswinapitemporary-files

解决方案


您看到的是 Windows 10 中添加的新“存储感知”功能。

如何在 Windows 10 中自动清除临时文件

Windows 10 在最近的版本中能够自动清除临时文件。从 build 15014 开始,设置中出现了一个新选项。

图片

启用后,可以设置清除临时文件、回收站等项目。您可以单独关闭它们。

图片

图片

或者,另一种选择是更改您的应用程序以将其临时文件保存在您控制的非系统临时文件夹中,而不是使用GetTempPath(). 并且可能还使用其他东西GetTempFileName()来创建临时文件名(例如使用日期/时间或 guid 代替),因此 Windows 不可能跟踪您创建的临时文件。那么也许您的文件将不再被 Storage Sense 自动删除。


推荐阅读