windows - 如何防止使用 GetTempFileName 创建的文件在重启时被自动删除

标签 windows winapi temporary-files

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

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

我通过故意终止应用程序并重新启动来测试问题;事实上,临时文件在重启后就消失了。

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

我能做些什么来阻止这种情况?或者我应该只更改安全数据的存储位置吗?

最佳答案

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

How to Clear Temporary Files Automatically in Windows 10 .

Windows 10 got the ability to clear temporary files automatically in a recent build. Starting with build 15014, a new option appeared in Settings.

image

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

image

image

或者,另一种选择是更改您的应用以将其临时文件保存在您控制的非系统临时文件夹中,而不是使用 GetTempPath()。也可能使用 GetTempFileName() 以外的东西来创建您的临时文件名(例如使用日期/时间或 guid),因此 Windows 不可能跟踪您创建的临时文件。那么你的文件可能不会再被存储感知自动删除。

关于windows - 如何防止使用 GetTempFileName 创建的文件在重启时被自动删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51547248/

相关文章:

windows - 子窗口没有收到 WM_DESTROY?

c++ - 在 Win32 API 中启动 2D 游戏项目?

php - 如何将文件内容复制到 PHP 中的临时文件中?

c++ - Qt 应用程序在使用文件打开对话框后将焦点切换到不同的应用程序

c - Lua c lib Windows : The specified procedure could not be found

c++ - 我忘记了什么吗? (适用于 Windows 的双控制台缓冲区)

python - 具有自定义名称的临时文件/目录?

php - 我可以使用通过 PHP tmpfile 创建的文件句柄进行 CURL POST 吗?

linux - 从 Windows 和 Eclipse 连接到 gitolite 服务器

Windows 7 - 无网络 - 我需要在本地伪造 UNC 路径以进行开发/测试吗?