如何获取当前用户的临时文件夹

目前我正在使用以下function获取当前用户的临时文件夹path:

string tempPath = System.IO.Path.GetTempPath(); 

在一些机器上,它给了我当前用户的临时文件夹path,如:

C:\ Documents and Settings \ administrator \ Local Settings \ Temp \

在一些机器上,它给了我系统临时文件夹path,如:

C:\ WINDOWS \ TEMP

MSDN文档也说上面的API返回当前系统的临时文件夹。

是否有任何其他的API可以给我当前用户的临时文件夹path,如下所示:

C:\ Documents and Settings \ administrator \ Local Settings \ Temp \

System.IO.Path.GetTempPath()只是在Kernel32中本地调用GetTempPath(..)一个包装。

看看http://msdn.microsoft.com/en-us/library/aa364992(VS.85).aspx

从该页复制:

GetTempPath函数按照以下顺序检查是否存在环境variables,并使用find的第一个path:

  • 由TMP环境variables指定的path。
  • 由TEMP环境variables指定的path。
  • USERPROFILE环境variables指定的path。
  • Windows目录。

我不清楚“Windows目录”是指windows下的临时目录还是windows目录本身。 在Windows目录中倾销临时文件听起来像是一个不受欢迎的情况,但是谁知道。

所以把这个页面和你的文章结合起来,我猜测你的pipe理员用户的TMP,TEMP或者USERPROFILEvariables中的任何一个都指向了windowspath,否则他们没有被设置,并且正在回退到windows temppath。

我有这个相同的要求 – 我们要把日志放在环境中应该存在的特定的根目录下。

 public static readonly string DefaultLogFilePath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); 

如果我想结合这个子目录,我应该能够使用Path.Combine( ... )

GetFolderPath方法有一个特殊的文件夹选项的重载,它允许您控制是否创build或简单validation指定的path。

不要使用这个:

 System.Environment.GetEnvironmentVariable("TEMP") 

环境variables可以被覆盖,所以TEMPvariables不一定是目录。

正确的方法是在接受的答案中使用System.IO.Path.GetTempPath()

尝试

 Environment.GetEnvironmentVariable("temp");