通过GetTempPath
,GetTempPath
和CreateFile
将文件存储在%TEMP%目录中超过两个小时是否足够安全?是否有保证此文件不会被删除?
提前致谢。
答案 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%文件夹中的文件无关。
如果您无法让进程始终保持打开状态,则必须依赖系统上的其他进程(和其他用户)不做任何事情......