在Windows中获取安全的临时文件夹

时间:2011-04-04 12:55:55

标签: windows api filesystems temporary-files

我需要一个安全的临时文件夹,我可以为我的应用程序存储临时文件,但到目前为止,我的研究已经让我得出结论,我发现的所有方法都存在缺陷。

第一个想法是使用GetTempPath函数,但这会导致两个问题:

  • 该文件夹可能不存在,因此我必须逐个截断文件夹到root,如果它们不存在,则重新创建它们回到完整路径(容易出错,单调乏味)
  • 来自“Larry Osterman的WebLog”click似乎GetTempPath可能会回退到USERPROFILE或Windows目录并在那里提取大量文件,这是SUPER BAD(TM)!

在同一篇文章中,有一个建议使用GetEnvironmentVariable,但这对我来说似乎是一个危险的功能(例如缺少TMP和TEMP envvars)。

我可以使用更清洁的功能吗?似乎SHGetKnownFolderPath不知道临时文件夹是什么。

4 个答案:

答案 0 :(得分:3)

您的程序可能不是唯一依赖GetTempPath的程序,因此期望它返回正确的可写路径是合理的。特别是因为Windows会自动为您初始化TMP和TEMP环境变量;有人不得不为了超越他们而遇到一些麻烦,他们有责任确保改变不会弄乱他们的系统。

我会继续并假设GetTempPath正常工作,并在尝试创建临时文件时担心失败 - 当时可能会发生其他错误,无论如何都需要检查。

答案 1 :(得分:0)

一个想法是获取应用程序所在的路径(GetModuleFileNameExGetModuleHandle(NULL)GetCurrentProcess相结合),因为只要您的应用程序正在运行,就无法在Windows下删除此目录从它(也许我错了......几年前我不能这样:))并在这个目录中创建一个临时目录。

答案 2 :(得分:0)

您的第一个要点是解决方案。将其包装在一个方法中,这样就不会重复代码。

答案 3 :(得分:0)

根据this answer,可以使用Boost的文件系统库。