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