我需要一个安全的临时文件夹,我可以为我的应用程序存储临时文件,但到目前为止,我的研究已经让我得出结论,我发现的所有方法都存在缺陷。
第一个想法是使用GetTempPath
函数,但这会导致两个问题:
GetTempPath
可能会回退到USERPROFILE或Windows目录并在那里提取大量文件,这是SUPER BAD(TM)!在同一篇文章中,有一个建议使用GetEnvironmentVariable,但这对我来说似乎是一个危险的功能(例如缺少TMP和TEMP envvars)。
我可以使用更清洁的功能吗?似乎SHGetKnownFolderPath不知道临时文件夹是什么。
答案 0 :(得分:3)
您的程序可能不是唯一依赖GetTempPath
的程序,因此期望它返回正确的可写路径是合理的。特别是因为Windows会自动为您初始化TMP和TEMP环境变量;有人不得不为了超越他们而遇到一些麻烦,他们有责任确保改变不会弄乱他们的系统。
我会继续并假设GetTempPath
正常工作,并在尝试创建临时文件时担心失败 - 当时可能会发生其他错误,无论如何都需要检查。
答案 1 :(得分:0)
一个想法是获取应用程序所在的路径(GetModuleFileNameEx
与GetModuleHandle(NULL)
和GetCurrentProcess
相结合),因为只要您的应用程序正在运行,就无法在Windows下删除此目录从它(也许我错了......几年前我不能这样:))并在这个目录中创建一个临时目录。
答案 2 :(得分:0)
您的第一个要点是解决方案。将其包装在一个方法中,这样就不会重复代码。
答案 3 :(得分:0)
根据this answer,可以使用Boost的文件系统库。