[英]Getting the path of the home directory in C#?
好的,我已经检查了 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%");
您正在寻找Environment.SpecialFolder.UserProfile
,它指的是 Windows 上的C:\\Users\\myname
和 Unix/Linux 上的/home/myname
:
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)
注意Environment.SpecialFolder.Personal
是我的文档(或在 win7 及以上版本的文档),但与 Unix/Linux 上的主目录相同。
Environment.SpecialFolder.Personal
实际上并不返回主文件夹,而是返回我的文档文件夹。 在 Win32 上获取主文件夹的最安全方法是读取%HOMEDRIVE%%HOMEPATH%
。 阅读环境变量其实是非常移植到(在UNIX和Windows)做的,所以我不知道为什么海报想那么做。
编辑添加:对于跨平台(Windows/Unix)C#,我会在 Unix 和 OSX 上阅读$HOME
以及在 Windows 上阅读%HOMEDRIVE%%HOMEPATH%
。
我相信你正在寻找的是:
System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal)
作为参考,它实际上包含在mscorlib
。
在 DotNetCore 1.1 System.Environment.SpecialFolder
中不存在。 它可能存在于 2.0-beta 中。 在此之前,您可以使用以下方法:
var envHome = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "HOMEPATH" : "HOME";
var home = Environment.GetEnvironmentVariable(envHome);`
底线答案是否定的。 .NET 中没有简单的基于系统的方法来获取主目录,因此我们可以期望在 Windows 和 Mono 上的 .NET 中实现。
您将需要进行一些操作系统检测并分支到操作系统特定的代码。
当您说跨平台方式时,您还需要支持哪些其他操作系统? 如果您在非 Windows 操作系统上运行,您可能需要进行一些简单的操作系统检测来选择查找主目录的方法。
该网站似乎提供了一种在 Windows 中执行所需操作的方法。
这可以使用System.IO
GetEnvironmentVariable
来完成:
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
我没有机器来测试它,但%HOMESHARE%
可能适合你。 否则,这里有一个很好的环境变量列表。
仅供将来参考,Windows 10 中的预定义变量列表取自Windows 10 默认环境变量。
多变的 | WINDOWS 10 |
---|---|
%ALLUSERSPROFILE% | C:\程序数据 |
%应用程序数据% | C:\Users{用户名}\AppData\Roaming |
%光盘% | 当前目录完整路径。 (仅限命令) |
%CMDCMDLINE% | 返回用于启动当前 cmd.exe session 的确切命令行。 (仅限命令) |
%CMDEXTVERSION% | 当前命令处理器扩展的数量。 (仅限命令) |
%CommonProgramFiles% | C:\Program Files\Common Files |
%CommonProgramFiles(x86)% | C:\Program Files (x86)\Common Files |
%CommonProgramW6432% | C:\Program Files\Common Files |
%COMPUTERNAME% | 当前本地系统的计算机名称。 |
%COMSPEC% | C:\Windows\System32\cmd.exe |
%日期% | 当前日期的格式由 Date 命令确定。 (仅限命令) |
%错误级别% | 定义上一个命令或程序退出状态的数字。 (仅限命令) |
%HOMEDRIVE% | C:| |
%HOMEPATH% | C:\用户{用户名} |
%本地应用数据% | C:\Users{用户名}\AppData\Local |
%登录服务器% | \{domain_logon_server} \微软帐户 |
%NUMBER_OF_PROCESSORS% | 8个 |
%OS% | Windows_NT |
%小路% | C:\Windows; C:\Windows\System32; C:\Windows\System32\Wbem; C:\Windows\System32\WindowsPowerShell\v1.0 |
%路径扩展% | .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC |
%PROCESSOR_ARCHITECTURE% | AMD64 |
%PROCESSOR_IDENTIFIER% | Intel64 家族 6 Model 158 步进 9,GenuineIntel |
%PROCESSOR_LEVEL% | 6个 |
%PROCESSOR_REVISION% | 9e09 |
%程序数据% | C:\程序数据 |
%程序文件% | C:\程序文件 |
%程序W6432% | C:\程序文件 |
%PROGRAMFILES(X86)% | C:\程序文件 (x86) |
%迅速的% | 当前命令提示符格式的代码。 代码通常是 $P$G (仅限命令) |
%PSModulePath% | C:\Windows\system32\WindowsPowerShell\v1.0\Modules| |
%民众% | C:\用户\公共 |
%随机的% | 获取 0 到 32767 之间的随机数。 (仅限命令) |
%SessionName% | 当直接登录到机器时,返回“Console”。 当客户端通过终端服务器 session 连接时,是组合 连接名称,后跟井号 {#} 和 session 编号。 |
%SystemDrive% | C: |
%SystemRoot% | C:\Windows |
%温度% | C:\Users{用户名}\AppData\Local\Temp |
%TMP% | C:\Users{用户名}\AppData\Local\Temp |
%时间% | 当前时间的格式由 Time 命令确定。 (仅限命令) |
%用户域% | 与当前用户关联的.network 域名。 |
%USERDOMAIN_ROAMINGPROFILE% | 与当前漫游配置文件关联的.network 域名。 |
%用户名% | {用户名} |
%用户资料% | C:\用户{用户名} |
%风向% | C:\Windows |
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.