在C#中获取主目录的path?

好的,我已经检查了Environment.SpecialFolder,但是这里没有任何内容。

我想在C#中获取当前用户的主目录。 (例如XP下的c:\documents and settings\user ,Vista下的c:\users\user和Unix下的/home/user )。

我知道我可以阅读环境variables来找出这个问题,但是我想以跨平台的方式来做这件事。

有什么办法可以做到这一点与.NET(最好使用mscorlib)?

更新 :好的,这是我最终使用的代码:

 string homePath = (Environment.OSVersion.Platform == PlatformID.Unix || Environment.OSVersion.Platform == PlatformID.MacOSX) ? Environment.GetEnvironmentVariable("HOME") : Environment.ExpandEnvironmentVariables("%HOMEDRIVE%%HOMEPATH%"); 

Environment.SpecialFolder.Personal实际上不会返回主文件夹,它会返回我的文档文件夹。 在Win32上获取主文件夹最安全的方法是读取%HOMEDRIVE%%HOMEPATH% 。 读取环境variables实际上非常方便(跨Unix和Windows),所以我不确定海报为什么这样做。

编辑补充:对于跨平台(Windows / Unix)的C#,我读$HOME Unix和OSX上的$HOME和Windows上的%HOMEDRIVE%%HOMEPATH%

 Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); 

个人是我的文档(或win7中的文档)。

我相信你正在寻找的是:

 System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal) 

作为参考,它实际上包含在mscorlib

底线的答案是否定的。在.NET中,并不是简单的基于系统的方法来获得主目录,以便我们可以期望在Windows和Mono中的.NET中实现一个实现。

你将需要做一些操作系统检测和分支到操作系统特定的代码。

在DotNetCore 1.1 System.Environment.SpecialFolder不存在。 它可能存在于2.0-beta中。 在此之前,要做到这一点,您可以使用以下内容:

var envHome = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "HOMEPATH" : "HOME"; var home = Environment.GetEnvironmentVariable(envHome);

当你说跨平台的方式,你需要支持哪些其他的操作系统? 如果您在非Windows操作系统上运行,您可能需要执行一些简单的操作系统检测来select查找主目录的方法。

这个网站似乎给出了一种方法来做你需要在Windows中。

我没有机器来testing它,但%HOMESHARE%可能适合你。 否则,这是一个很好的环境variables列表 。

主张:

 using System.IO; var homeDrive = Environment.GetEnvironmentVariable("HOMEDRIVE"); if (homeDrive != null) { var homePath = Environment.GetEnvironmentVariable("HOMEPATH"); if (homePath != null) { var fullHomePath = homeDrive + Path.DirectorySeparatorChar + homePath; FolderPath = Path.Combine(fullHomePath, "myFolder"); } else { throw new Exception("Environment variable error, there is no 'HOMEPATH'"); } } else { throw new Exception("Environment variable error, there is no 'HOMEDRIVE'"); } 

然后它在窗口下生成: C:\\\\Users\\myusername\\myFolder

请注意,如果你使用

 var fullHomePath = Path.Combine(homeDrive.ToString(), homePath.ToString()) 

它会失败,因为它会产生: \\Users\\myusername\\myFolder