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

Mif*_*Fox 94 .net c#

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

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

我知道我可以阅读环境变量来找到它,但我希望以跨平台的方式做到这一点.

有什么方法可以用.NET做这个(最好使用mscorlib)?

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

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

小智 83

Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)
Run Code Online (Sandbox Code Playgroud)

个人是我的文件(或win7中的文件).

  • 请注意,UserProfile是.NET 4.0中的新增功能,如果使用.NET 2.0/3.5,则必须手动调用win32 API,其值为40,用于UserProfile (8认同)
  • 不要手动使用DirectorySeperatorChar.使用Path.Combine. (3认同)
  • 不要忘记使用 System.IO.Path.DirectorySeparatorChar 来构建您的文件路径以保持它的可移植性。 (2认同)

sig*_*int 48

Environment.SpecialFolder.Personal实际上并不返回主文件夹,它返回My Documents文件夹.在Win32上获取主文件夹最安全的方法是阅读%HOMEDRIVE%%HOMEPATH%.阅读环境变量其实是非常移植到(在UNIX和Windows)做的,所以我不知道为什么海报想去做.

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

  • 你不能在Windows上使用%USERPROFILE%吗? (12认同)
  • person-b,%USERPROFILE%和%HOMEDRIVE %% HOMEPATH%在个人电脑上通常是相同的,但通常指向网络环境中的不同位置.例如,在工作中我的USERPROFILE是C:\ Documents and Settings\username,但主目录是Z:\,这是一个由IT定期备份的网络驱动器. (2认同)

Mat*_*ley 13

我相信你要找的是:

System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal)
Run Code Online (Sandbox Code Playgroud)

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

  • @MStallers不,%HOMEDRIVE %% HOMEPATH%是. (8认同)
  • 请注意,Environment.SpecialFolder.UserProfile在.NET 4.0中可用,这是您想要的 (7认同)

KBP*_*KBP 6

在DotNetCore 1.1 System.Environment.SpecialFolder中不存在.它可能存在于2.0-beta中.在此之前,要执行此操作,您可以使用以下内容:

var envHome = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "HOMEPATH" : "HOME";
var home = Environment.GetEnvironmentVariable(envHome);`
Run Code Online (Sandbox Code Playgroud)