繁体   English   中英

获取C#中主目录的路径?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM