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

时间:2015-07-29 08:48:55

标签: c++ winapi

通过GetTempPathGetTempPathCreateFile将文件存储在%TEMP%目录中超过两个小时是否足够安全?是否有保证此文件不会被删除?

提前致谢。

4 个答案:

答案 0 :(得分:2)

必须使用CreateFile的FILE_FLAG_DELETE_ON_CLOSE选项创建在TEMP目录中创建的文件。这样可以确保文件始终被清理,并且您无法喷洒垃圾文件,即使程序在有机会再次删除文件之前崩溃也是如此。

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

很多程序都没有遵循这个建议,并且用户的TEMP目录往往是一个很大的混乱,迫使用户偶尔手动清理它。 Windows的内置功能,他将使用“磁盘清理”小程序。如果您不遵循此建议,将丢失文件的情况。最好使用%AppData%。

答案 1 :(得分:0)

没有保证。除了用户开始任何清理之外,通常不会清除此文件夹。

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

答案 2 :(得分:0)

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

替代方案:

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

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

答案 3 :(得分:0)

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

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

如果您无法让进程始终保持打开状态,则必须依赖系统上的其他进程(和其他用户)不做任何事情......