好吧,我查了环境。特殊文件夹,但里面没有这个。
我想获取当前用户在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%");
9条答案
按热度按时间aelbi1ox1#
您要查找的
Environment.SpecialFolder.UserProfile
在Windows上是指C:\Users\myname
,在Unix/Linux上是指/home/myname
:注意
Environment.SpecialFolder.Personal
是我的文档(或win7和更高版本中的文档),但与Unix/Linux上的主目录相同。hgc7kmma2#
Environment.SpecialFolder.Personal
实际上并不返回主文件夹,它返回的是 My Documents 文件夹。在Win32上获取主文件夹最安全的方法是读取%HOMEDRIVE%%HOMEPATH%
。阅读环境变量实际上是非常可移植的(跨Unix和Windows),所以我不知道为什么发帖者想 * 不 * 这样做。$HOME
,在Windows上阅读%HOMEDRIVE%%HOMEPATH%
。ecbunoof3#
我相信你要找的是:
作为参考,它实际上包含在
mscorlib
中。rn0zuynd4#
在DotNetCore 1.1中不存在
System.Environment.SpecialFolder
。它可能存在于2.0-beta中。在此之前,您可以使用以下命令执行此操作:oogrdqng5#
底线答案是否定的。这不是一个简单的基于系统的方法,在.NET中获得主目录,使我们可以期望在Windows上的.NET和Mono中的实现。
您将需要执行一些操作系统检测并分支到特定于操作系统的代码。
izkcnapc6#
当你说跨平台的方式,你还需要支持哪些操作系统?如果你运行在非Windows操作系统上,你可能需要做一些简单的操作系统检测来选择查找主目录的方法。
This website似乎给予了一种在Windows中做你需要的事情的方法。
nmpmafwu7#
这可以在
System.IO
中使用GetEnvironmentVariable
来完成:然后在窗口下生成:
C:\\\\Users\\myusername\\myFolder
请注意,如果使用
它失败是因为它产生:
\\Users\\myusername\\myFolder
u3r8eeie8#
我没有一台机器来测试它,但是
%HOMESHARE%
可能对你有用。另外,这里有一个相当不错的list of environment variables。dz6r00yl9#
仅供将来参考,Windows 10中预定义变量的列表,取自Windows 10 default environment variables。
| 变量| windows 10|
| - ------| - ------|
| %所有用户配置文件%| C:\程序数据|
| %苹果酸%| C:\用户{用户名}\应用程序数据\漫游|
| % CD %|当前目录完整路径。(仅命令)|
| %指令指令行%|返回用于启动当前cmd.exe会话的确切命令行。(仅命令)|
| % CMDEX版本%|当前命令处理器扩展的数目。(仅命令)|
| %公用程序文件%| C:\程序文件\公用文件|
| %公用程序文件(x86)%| C:\程序文件(x86)\公用文件|
| %常用程序W6432%| C:\程序文件\公用文件|
| %计算机名%|当前本地系统的计算机名。|
| % COMSPEC %| C:\Windows\System32\cmd.exe|
| 日期|当前日期的格式由"日期"命令确定。(仅命令)|
| %错误级别%|定义前一命令或程序退出状态的编号。(仅命令)|
| %本地驱动器%|丙:||
| %主页路径%| C:\用户{用户名}|
| LOCALAPDATA %| C:\用户{用户名}\应用程序数据\本地|
| %登录服务器%| {域登录服务器} \Microsoft帐户|
| %处理器数目%|八个|
| %总生存率%| Windows_NT|
| %路径%| C:\ windows ; C:\ windows \系统32; C:\Windows操作系统\System32系统\Web浏览器C:\ windows \系统32\ windows PowerShell\v1.0|
| %路径扩展%| . COM文件;. EXE文件;. BAT文件; . CMD;. VBS;. VBE;.命令;.命令;. . JS;. JSE;. WSF; . WSH;. MSC|
| %处理器体系结构%| AMD64|
| %处理器标识符%|英特尔64系列6型号158步进9,正版英特尔|
| %处理器级别%|六个|
| %处理器版本%|九月九日|
| %方案数据%| C:\程序数据|
| %方案文件%| C:\程序文件|
| %程序W6432%| C:\程序文件|
| %程序文件(X86)%| C:\程序文件(x86)|
| %提示%|当前命令提示符格式的代码。代码通常为$P $G(仅命令)|
| % PS模块路径%| C:\ windows \系统32\ windows PowerShell\v1.0\模块||
| %公开%| C:\用户\公用|
| %随机%|获取0到32767之间的随机数。(仅命令)|
| %会话名称%|直接登录到计算机时,返回"控制台"。当客户端通过终端服务器会话连接时,是组合连接名称,后跟井号{#}和会话号。|
| %系统驱动器%|丙:|
| %系统根目录%| C:\窗口|
| %温度%| C:\用户{用户名}\应用程序数据\本地\临时|
| % TMP %| C:\用户{用户名}\应用程序数据\本地\临时|
| %时间%|当前时间,格式由"时间"命令确定。(仅命令)|
| %用户域%|与当前用户关联的网络域名。|
| %用户域漫游配置文件%|与当前漫游配置文件关联的网络域名。|
| %用户名%| {用户名}|
| %用户配置文件%| C:\用户{用户名}|
| %风方向%| C:\窗口|