簡體   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