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

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

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

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

C:\Documents and Settings\管理员\本地设置\Temp\

在一些机器上,它会给我系统临时文件夹路径,如:

C:\Windows\TEMP

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

是否有其他API可以给我当前用户的临时文件夹路径,就像这样:

C:\Documents and Settings\管理员\本地设置\Temp\

354895 次浏览

使用这个:

System.Environment.GetEnvironmentVariable("TEMP")

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

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

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路径。

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

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

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

GetFolderPath方法有一个重载的特殊文件夹选项,它允许你控制指定的路径是否被创建或简单地验证。