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

时间:2009-06-03 12:35:51

标签: c# .net temporary-directory

目前我正在使用以下函数来获取当前用户的临时文件夹路径:

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

在某些机器上,它为我提供了当前用户的临时文件夹路径,如:

  

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

在某些机器上,它为我提供了系统临时文件夹路径,如:

  

C:\的Windows \ TEMP

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

是否有其他可用的API可以为我提供当前用户的临时文件夹路径:

  

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

4 个答案:

答案 0 :(得分:387)

System.IO.Path.GetTempPath()只是Kernel32中GetTempPath(..)本机调用的包装器。

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

从该页面复制:

  

GetTempPath函数按以下顺序检查环境变量是否存在,并使用找到的第一个路径:

     
      
  • TMP环境变量指定的路径。
  •   
  • TEMP环境变量指定的路径。
  •   
  • USERPROFILE环境变量指定的路径。
  •   
  • Windows目录。
  •   

我不完全清楚“Windows目录”是指Windows下的临时目录还是Windows目录本身。将临时文件转储到Windows目录本身听起来像是一个不受欢迎的情况,但谁知道。

因此,将该页面与您的帖子结合起来我猜想管理员用户的TMP,TEMP或USERPROFILE变量中的任何一个都指向了Windows路径,否则它们没有被设置并且它正在回退到windows temp路径。

答案 1 :(得分:25)

不要使用它:

System.Environment.GetEnvironmentVariable("TEMP")

可以覆盖环境变量,因此TEMP变量不一定是目录。

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

答案 2 :(得分:20)

我有同样的要求 - 我们希望将日志放在应该存在于环境中的特定根目录中。

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

如果我想将它与子目录结合起来,我应该可以使用Path.Combine( ... )

GetFolderPath方法对特殊文件夹选项有重载,允许您控制是创建指定路径还是仅验证指定路径。

答案 3 :(得分:-6)

Environment.GetEnvironmentVariable("temp");