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

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

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

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

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

C:\Windows\TEMP

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

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

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


当前回答

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

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

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

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

其他回答

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

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

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

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

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

不要使用这个:

System.Environment.GetEnvironmentVariable("TEMP")

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

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