Windows目录是临时文件的位置 - GetTempPath函数

时间:2015-01-10 09:10:04

标签: c winapi temporary-files

我在C中创建一个小型库,仅用于Windows,以便在我想创建应用程序时帮助我。 我遇到了创建临时文件的主题。 我查看了GetTempPath函数文档,我看到它按此顺序使用第一个现有的环境变量:

  1. TMP环境变量指定的路径。
  2. TEMP环境变量指定的路径。
  3. USERPROFILE环境变量指定的路径。
  4. Windows目录。
  5. 问题是:如果由于某种原因前三个变量不存在且函数返回Windows目录C:\Windows\,该目录是否可以放置临时文件?

    如果不是那么为什么函数会返回它?

    编辑:然后我应该把临时文件放在哪里?

    我不想抛出Access Denied ErrorTemp Path Not Found Error

2 个答案:

答案 0 :(得分:2)

  

C:\ Windows \,这个目录是放置临时文件的地方吗?

绝对不是。 (这假设C:\Windows\GetWindowsDirectory ())返回的Windows目录。

此外,在最近的任何Windows安装中,普通用户甚至无法向Windows目录写入任何内容(例如C:\Windows\)。

如果没有设置上述三个env / var / s,请让您的应用程序为临时文件创建自己的目录,该目录通常位于用户主目录的某个位置。

如果您的应用程序在安装期间对此进行调查,则可能会考虑将TMPTEMP设置为合理的目录并创建后者。

答案 1 :(得分:1)

这篇文章可能无法回答这个问题,但它可以解释发生了什么以及如何解决潜在的问题:

MSDN documentation表示GetTempPath评估了许多环境变量。

但是,Cygwin文档说环境被剥离了。因此,Cygwin进程在其上下文中将没有必要的环境变量。最后,GetTempPath无法捕获它们并默认为Windows目录。

解决方案:有一个功能可以将您的流程环境与周围的Windows环境同步:

#include <sys/cygwin.h>
...
cygwin_internal (CW_SYNC_WINENV);

请参阅Cygwin文档。