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

时间:2018-07-26 20:44:42

标签: windows winapi temporary-files

我们的应用程序从外部设备收集数据。该数据主要驻留在内存中,但是在用户明确保存数据之前,将其假脱机后台处理到磁盘。如果应用程序由于某种原因崩溃,这将提供一些恢复机会。一般来说,它工作正常。

我们最近发现,由于Windows对自动更新的要求越来越高,这些文件在重新启动期间会自动删除。因此,如果Windows终止了我们的应用程序以自动应用更新,那么在重启后,可以恢复的临时文件将消失。

我已经通过有意终止应用程序并重新启动来测试了该问题;实际上,重新启动后临时文件已消失。

使用Win32 API调用GetTempFileNameGetTempPath创建文件。我所读过的所有内容都表明,这些文件从未自动删除,但显然已被删除。

我该怎么做才能阻止这种情况?还是应该只更改安全数据的存储位置?

2 个答案:

答案 0 :(得分:5)

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

How to Clear Temporary Files Automatically in Windows 10

  

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

image

启用后,可以将其设置为清除临时文件,回收站等项目。您可以分别将其关闭。

image

image

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

答案 1 :(得分:1)

最佳解决方案IMO不使用临时文件夹,该文件夹包含(顾名思义)可以删除而没有任何后果的临时文件。

相反,您应该将它们存储在LocalAppdata文件夹中的某个位置。

使用SHGetFolderPath函数检索LocalAppData文件夹的实际位置。

在LocalAppData中,创建一个名称与您公司和/或产品名称相同的文件夹,或在其中存储所有伪临时文件。