我在C中创建一个小型库,仅用于Windows,以便在我想创建应用程序时帮助我。 我遇到了创建临时文件的主题。 我查看了GetTempPath函数文档,我看到它按此顺序使用第一个现有的环境变量:
TMP
环境变量指定的路径。TEMP
环境变量指定的路径。USERPROFILE
环境变量指定的路径。问题是:如果由于某种原因前三个变量不存在且函数返回Windows目录C:\Windows\
,该目录是否可以放置临时文件?
如果不是那么为什么函数会返回它?
编辑:然后我应该把临时文件放在哪里?
我不想抛出Access Denied Error
或Temp Path Not Found Error
答案 0 :(得分:2)
C:\ Windows \,这个目录是放置临时文件的地方吗?
绝对不是。 (这假设C:\Windows\
是GetWindowsDirectory ()
)返回的Windows目录。
此外,在最近的任何Windows安装中,普通用户甚至无法向Windows目录写入任何内容(例如C:\Windows\
)。
如果没有设置上述三个env / var / s,请让您的应用程序为临时文件创建自己的目录,该目录通常位于用户主目录的某个位置。
如果您的应用程序在安装期间对此进行调查,则可能会考虑将TMP
或TEMP
设置为合理的目录并创建后者。
答案 1 :(得分:1)
这篇文章可能无法回答这个问题,但它可以解释发生了什么以及如何解决潜在的问题:
MSDN documentation表示GetTempPath
评估了许多环境变量。
但是,Cygwin文档说环境被剥离了。因此,Cygwin进程在其上下文中将没有必要的环境变量。最后,GetTempPath
无法捕获它们并默认为Windows目录。
解决方案:有一个功能可以将您的流程环境与周围的Windows环境同步:
#include <sys/cygwin.h>
...
cygwin_internal (CW_SYNC_WINENV);
请参阅Cygwin文档。