2009-07-17 64 views
76

好的,我檢查了Environment.SpecialFolder,但是這裏沒有任何內容。在C#中獲取主目錄的路徑?

我想在C#中獲取當前用戶的主目錄。 (例如c:\documents and settings\user XP下,Vista下c:\users\user/home/user Unix下)。

我知道我可以讀取環境變量來發現這一點,但我想這樣做的一個跨平臺的方式。

有沒有什麼辦法可以做到這一點與.NET(最好使用mscorlib)?

UPDATE:好吧,這是我最後使用的代碼:

string homePath = (Environment.OSVersion.Platform == PlatformID.Unix || 
        Environment.OSVersion.Platform == PlatformID.MacOSX) 
    ? Environment.GetEnvironmentVariable("HOME") 
    : Environment.ExpandEnvironmentVariables("%HOMEDRIVE%%HOMEPATH%"); 
+2

BOOM。西部最快的槍:P – 2009-07-17 14:48:28

+0

不知道你的機器,但在我的XP機器上%HOMEDRIVE %% HOMEPATH%是一個網絡目錄,而不是c:\ Documents and Settings \ user \ MSalters \ – MSalters 2009-07-17 14:55:36

+0

說實話,我認爲這是確切的問題是.NET的未實現...您應該查看CSIDLS文檔(http://msdn.microsoft.com/en-us/library/bb762494.aspx)以查看Windows支持的完整列表:您實際上在尋找的是CSIDL_PROFILE,它在Windows中受支持,但由於某些深不可測的原因,不能由.NET支持。 – 2009-07-17 15:01:00

回答

40

Environment.SpecialFolder.Personal實際上並未返回主文件夾,它返回我的文檔文件夾。在Win32上獲取主文件夾的最安全方法是讀取%HOMEDRIVE%%HOMEPATH%。讀取環境變量實際上非常輕便(跨Unix和Windows),所以我不知道爲什麼海報想要而不是這樣做。

編輯補充:對於跨平臺(在Windows/Unix的)C#,當我讀到的Windows $HOME在Unix和OSX和%HOMEDRIVE%%HOMEPATH%

9

我相信你正在尋找的是:

System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal) 

作爲參考,它是包含在INFACT mscorlib

+0

返回我的文檔文件夾。 – MiffTheFox 2009-07-17 14:48:58

0

當你說跨平臺的方式時,你需要支持哪些其他操作系統?如果您在非Windows操作系統上運行,您可能需要執行一些簡單的操作系統檢測來選擇查找主目錄的方法。

This website似乎給出了一種方法來做你需要在Windows中。

3

底線答案是否定的。在.NET中不是簡單的基於系統的方法來獲取主目錄,以便我們可以期望在Windows和Mono中的.NET中的實現。

您將需要執行一些操作系統檢測並轉到操作系統特定的代碼。

65
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); 

個人是我的文檔(或win7中的文檔)。

0

命題:

using System.IO; 
var homeDrive = Environment.GetEnvironmentVariable("HOMEDRIVE"); 
if (homeDrive != null) 
{ 
    var homePath = Environment.GetEnvironmentVariable("HOMEPATH"); 
    if (homePath != null) 
    {    
    var fullHomePath = homeDrive + Path.DirectorySeparatorChar + homePath; 
    FolderPath = 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

4

在DotNetCore 1.1 System.Environment.SpecialFolder不存在ST。它可能存在於2.0-beta中。在此之前,要做到這一點,您可以使用以下內容:

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