目前我正在使用以下函数来获取当前用户的临时文件夹路径:
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
从该页面复制:
GetTempPath 函数按以下顺序检查环境变量是否存在,并使用找到的第一个路径: TMP 环境变量指定的路径。 TEMP 环境变量指定的路径。 USERPROFILE 环境变量指定的路径。 Windows 目录。
我并不完全清楚“Windows 目录”是指 windows 下的临时目录还是 windows 目录本身。将临时文件转储到 windows 目录本身听起来像是不受欢迎的情况,但谁知道呢。
因此,将该页面与您的帖子结合起来,我猜您的管理员用户的 TMP、TEMP 或 USERPROFILE 变量中的任何一个都指向 windows 路径,否则它们未设置并且它正在回退到 windows 临时路径。
不要使用这个:
System.Environment.GetEnvironmentVariable("TEMP")
环境变量可以被覆盖,因此 TEMP
变量不一定是目录。
正确的方法是在接受的答案中使用 System.IO.Path.GetTempPath()
。
System.IO.Path.GetTempPath()
。
GetEnvironmentVariable("TEMP")
和 GetTempPath()
之间有 2 个主要区别。 GetTempPath()
首先检查“TMP”变量,然后检查“TEMP”,最后检查“USERPROFILE”。如果找不到其中任何一个,则返回到 Windows 文件夹的路径。它还保证它返回正确的路径,但不保证路径存在。
GetTempPath
无论如何都依赖于您的环境变量,因此用户 Logman 指出没有理由不使用 GetEnvironmentVariable
...它们都有相同的弱点。
我有同样的要求——我们想把日志放在环境中应该存在的特定根目录中。
public static readonly string DefaultLogFilePath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
如果我想将它与子目录结合起来,我应该可以使用 Path.Combine( ... )
。
GetFolderPath
方法具有特殊文件夹选项的重载,允许您控制是创建指定路径还是简单地验证指定路径。
TEMP
环境变量将设置在两个位置:用户本身和本地计算机。如果没有为用户设置,则将使用本地计算机,并且始终在默认安装中设置。因此搜索通常在第二步停止。在测试中,如果TMP
、TEMP
和USERPROFILE
都未设置,它实际上确实回退到%SystemRoot%
(C:\Windows\
)。