将文件存储在TEMP目录中是否足够安全?

Is it safe enough to store a file in the TEMP directory

本文关键字:是否 安全 存储 文件 TEMP      更新时间:2023-10-16

通过GetTempPath, GetTempPathCreateFile在%TEMP%目录中存储文件超过两个小时是否足够安全?你能保证这个文件不会被提前删除吗?

在TEMP目录中创建的文件必须使用CreateFile的FILE_FLAG_DELETE_ON_CLOSE选项创建。这确保了文件将始终被清理,并且您不能喷射垃圾文件,即使您的程序在有机会再次删除文件之前崩溃。

这个选项也不可避免地迫使你做正确的事情,在你使用它的时候保持文件打开。这反过来又阻止了任何人删除文件,即使他们使用大锤。

许多程序不遵循这个建议,用户的TEMP目录往往是一个大旧的混乱,迫使用户偶尔手动清理它。作为Windows的内置功能,他将使用"磁盘清理"小程序。这种情况下,如果您不遵循此建议,您将丢失文件。最好使用%AppData%。

没有保证。这个文件夹通常不会被清除,除非用户开始清理。

但是每个人都可以在这里删除文件。在常规的基础上这样做是明智的

为了防止文件被删除,您可以保持一个句柄打开(假设应用程序一直在运行),并且让指定FILE_SHARE_DELETE(如果适用,也不指定FILE_SHARE_WRITE)。

替代:

使用%APPDATA%或%PROGRAMDATA%中您自己定期清除的路径,或者让用户指定路径。

此外,您可以注册一个定期清理文件夹的计划任务。

如果您不希望其他进程可以删除您的文件,只需将它们以FILE_SHARE_READ | FILE_SHARE_WRITE的共享模式打开即可。这样,任何试图删除它们的尝试都将失败,但任何其他进程都可以读取或写入它们。

BTW:这与%TEMP%文件夹中的文件无关。

如果你不能有一个进程来保持它们一直打开,你必须依赖系统上的其他进程(和其他用户)不做任何事情…