好的,我已经检查了Environment.SpecialFolder,但是没有任何内容可供选择。
我想在C#中获取当前用户的主目录。 (例如,XP下的c:\documents and settings\user
,Vista下的c:\users\user
和Unix下的/home/user
。
我知道我可以阅读环境变量来解决这个问题,但我希望以跨平台的方式做到这一点。
我有什么办法可以用.NET(最好是使用mscorlib)吗?
更新:好的,这是我最终使用的代码:
string homePath = (Environment.OSVersion.Platform == PlatformID.Unix ||
Environment.OSVersion.Platform == PlatformID.MacOSX)
? Environment.GetEnvironmentVariable("HOME")
: Environment.ExpandEnvironmentVariables("%HOMEDRIVE%%HOMEPATH%");
答案 0 :(得分:79)
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
个人是我的文件(或win7中的文件)。
答案 1 :(得分:46)
Environment.SpecialFolder.Personal
实际上并不返回主文件夹,它会返回我的文档文件夹。在Win32上获取主文件夹最安全的方法是阅读%HOMEDRIVE%%HOMEPATH%
。阅读环境变量实际上是非常便携的(跨Unix和Windows),所以我不确定为什么海报想不这样做。
编辑添加:对于跨平台(Windows / Unix)C#,我在Unix和OSX上阅读$HOME
,在Windows上阅读%HOMEDRIVE%%HOMEPATH%
。
答案 2 :(得分:12)
我相信你要找的是:
System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal)
作为参考,它实际上包含在mscorlib
。
答案 3 :(得分:5)
在DotNetCore 1.1 System.Environment.SpecialFolder
中不存在。它可能存在于2.0-beta中。在此之前,为此,您可以使用以下内容:
var envHome = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "HOMEPATH" : "HOME";
var home = Environment.GetEnvironmentVariable(envHome);`
答案 4 :(得分:3)
底线答案是否定的。在.NET中没有简单的基于系统的方法来获取Home目录,以便我们可以期望在Windows和Mono上的.NET中实现。
您需要进行一些操作系统检测并转移到特定于操作系统的代码。
答案 5 :(得分:1)
当您说跨平台方式时,您需要支持哪些其他操作系统?如果您在非Windows操作系统上运行,则可能需要执行一些简单的操作系统检测来选择查找主目录的方法。
This website似乎提供了一种在Windows中执行所需操作的方法。
答案 6 :(得分:0)
我没有机器对其进行测试,但%HOMESHARE%
可能适合您。否则,这是一个非常好的list of environment variables。
答案 7 :(得分:0)
可以使用GetEnvironmentVariable
中的System.IO
:
public string GetUserHome() {
var homeDrive = Environment.GetEnvironmentVariable("HOMEDRIVE");
if (!string.IsNullOrWhiteSpace(homeDrive))
{
var homePath = Environment.GetEnvironmentVariable("HOMEPATH");
if (!string.IsNullOrWhiteSpace(homePath))
{
var fullHomePath = homeDrive + Path.DirectorySeparatorChar + homePath;
return 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'");
}
}
然后它在windows下生成:C:\\\\Users\\myusername\\myFolder
请注意,如果您使用
var fullHomePath = Path.Combine(homeDrive.ToString(), homePath.ToString())
失败,因为它产生:\\Users\\myusername\\myFolder