关于c#:如何获取当前用户的临时文件夹

How to get temporary folder for current user

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

1
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\


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

请访问http://msdn.microsoft.com/en-us/library/aa364992(vs.85).aspx

从该页复制:

The GetTempPath function checks for the existence of environment variables in the following order and uses the first path found:

  • The path specified by the TMP environment variable.
  • The path specified by the TEMP environment variable.
  • The path specified by the USERPROFILE environment variable.
  • The Windows directory.

我不完全清楚"windows目录"是指windows下的临时目录还是windows目录本身。在Windows目录中转储临时文件本身听起来是一个不受欢迎的情况,但谁知道呢。

因此,将该页面与您的文章结合起来,我猜想管理员用户的tmp、temp或userprofile变量中的任何一个指向Windows路径,或者它们没有被设置,它将回退到Windows temp路径。


请勿使用:

1
System.Environment.GetEnvironmentVariable("TEMP")

环境变量可以被重写,因此TEMP变量不一定是目录。

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


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

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

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

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


尝试

1
Environment.GetEnvironmentVariable("temp");