2009-06-03 41 views
335

目前我使用下面的函数来获取当前用户的临时文件夹路径:如何获得临时文件夹中当前用户

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

某些机器上它给我像当前用户的临时文件夹路径:

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

某些机器上它给了我系统临时文件夹路径,如:

C:\ WINDOWS \ TEMP

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

是否有其他任何可用的API,它给了我这样的当前用户的临时文件夹路径:

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

+2

System.Environment.GetEnvironmentVariable(“TEMP”)的行为与GetTempPath()相同。 在我的计算机帐户'管理员'两个API返回“C:\ WINDOWS \ TEMP”,但对于帐户'网络服务'这两个API返回“C:\ Documents and Settings \网络服务\ Local Settings \ Temp \”。 – Anoop 2009-06-03 16:43:41

+1

也许'管理员'帐户确实有一个C:\ Windows \ Temp的临时文件夹? – Helen 2009-06-03 17:14:19

+2

是否有任何特定的原因,你为什么总是想要获取C:\ Documents and Settings \下的临时路径? – Noldorin 2009-06-03 17:31:25

回答

349

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目录下本身temp目录。在Windows目录中转储临时文件听起来像是一个不受欢迎的情况,但是谁知道。

因此,将该页面与您的文章相结合,我猜测您的管理员用户的TMP,TEMP或USERPROFILE变量中的任何一个指向了Windows路径,否则他们没有设置,并且正在对Windows进行回退临时路径。

-5

尝试

Environment.GetEnvironmentVariable("temp"); 
15

不要使用:

System.Environment.GetEnvironmentVariable("TEMP") 

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

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

17

我有这个相同的要求 - 我们要把日志放在环境中应该存在的特定根目录中。

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

如果我想这跟一个子目录结合起来,我应该能够使用Path.Combine(...)

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