在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