421

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

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

4 回答 4

435

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

看看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 临时路径。

于 2009-06-03T17:26:44.610 回答
47

不要使用这个:

System.Environment.GetEnvironmentVariable("TEMP")

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

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

于 2009-06-03T12:45:52.547 回答
25

我有同样的要求——我们想把日志放在环境中应该存在的特定根目录中。

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

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

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

于 2012-06-21T18:23:04.570 回答
-8

尝试

Environment.GetEnvironmentVariable("temp");
于 2009-06-03T12:45:04.653 回答