2009-07-17 11 views
76

ठीक है, मैंने पर्यावरण की जांच की है। SpecialFolder, लेकिन इसके लिए वहां कुछ भी नहीं है।सी # में घर निर्देशिका का मार्ग प्राप्त करना?

मैं वर्तमान उपयोगकर्ता की होम निर्देशिका सी # में प्राप्त करना चाहता हूं। (जैसे यूनिक्स के तहत XP के तहत c:\documents and settings\user, विस्टा के अंतर्गत c:\users\user, और /home/user।)

मैं जानता हूँ कि मैं इस पता लगाने के लिए पर्यावरण चर पढ़ सकते हैं, लेकिन मैं एक पार मंच रास्ते में ऐसा करना चाहते हैं।

क्या कोई तरीका है कि मैं इसे .NET (अधिमानतः mscorlib का उपयोग कर) के साथ कर सकता हूं?

अद्यतन:

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

BOOM। पश्चिम में सबसे तेज बंदूक: पी –

+0

आपकी मशीन के बारे में डुनो, लेकिन मेरे एक्सपी बॉक्स% पर HOMEDRIVE %% HOMEPATH% एक नेटवर्क निर्देशिका है, सी नहीं: \ दस्तावेज़ और सेटिंग्स \ उपयोगकर्ता \ MSalters \ – MSalters

+0

ईमानदार होने के लिए, मैं इस सटीक पर विचार करता हूं .NET का एक अनुपूरक होने की समस्या ... आपको Windows समर्थन का पूर्ण सूची देखने के लिए CSIDLS (http://msdn.microsoft.com/en-us/library/bb762494.aspx) के लिए प्रलेखन को देखना चाहिए: जो आप वास्तव में खोज रहे हैं वह CSIDL_PROFILE है, जो विंडोज में समर्थित है, लेकिन कुछ अवांछित कारणों से .NET द्वारा नहीं। –

उत्तर

40

Environment.SpecialFolder.Personal वास्तव में घर फ़ोल्डर वापस नहीं करता है, यह मेरे दस्तावेज़ फ़ोल्डर देता है। Win32 पर घर फ़ोल्डर पाने का सबसे सुरक्षित तरीका %HOMEDRIVE%%HOMEPATH% पढ़ना है। पर्यावरण चर पढ़ना वास्तव में (यूनिक्स और विंडोज़ में) करने के लिए बहुत पोर्टेबल है, इसलिए मुझे यकीन नहीं है कि पोस्टर क्यों नहीं चाहता था।

जोड़ने के लिए संपादित: पार मंच (विंडोज/यूनिक्स) सी # के लिए, मैं विंडोज पर यूनिक्स और OSX पर $HOME और %HOMEDRIVE%%HOMEPATH% पढ़ा था।

+0

मुझे एक तथ्य के लिए पता है होमवर्क * निक्स पर मौजूद नहीं है, और आम तौर पर यह होम है, होमपैथ नहीं। –

+0

मैथ्यू, आप सही हैं। मैंने मूल टिप्पणी पर एक स्पष्टीकरण जोड़ा। – sigint

+0

+1 सहमत हैं, यह सबसे निकटतम है जिसे हम प्राप्त करेंगे। – AnthonyWJones

9

मेरा मानना ​​है कि क्या आप के लिए देख रहे हैं:: ठीक है, इस कोड का उपयोग कर रहा समाप्त हो गया है

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

संदर्भ के लिए, उसमें शामिल वास्तव में है mscorlib

+0

जो मेरा दस्तावेज़ फ़ोल्डर देता है। – MiffTheFox

+0

"माय डॉक्यूमेंट्स" * * विंडोज़ की होम निर्देशिका में सबसे नज़दीक चीज है। – MSalters

+6

@MStallers नहीं,% HOMEDRIVE %% HOMEPATH% है। – MiffTheFox

0

जब आप क्रॉस-प्लेटफ़ॉर्म तरीके कहते हैं, तो आपको अन्य ओएस का समर्थन करने की आवश्यकता क्या है? यदि आप गैर-विंडोज ओएस पर चल रहे हैं तो घर निर्देशिका खोजने के लिए विधि का चयन करने के लिए आपको कुछ सरल ओएस पहचान करने की आवश्यकता हो सकती है।

This website विंडोज में आपको जो चाहिए वह करने का एक तरीका प्रदान करता है।

+0

चाहते हैं जब तक आप फ्रेमवर्क पर्यावरण के कुछ ब्राइंडेड कार्यान्वयन का उपयोग नहीं कर रहे हैं। GetFolder() को क्रॉस-प्लेटफ़ॉर्म काम करना चाहिए। –

+2

* चाहिए *। एमएस का कार्यान्वयन ऐसा नहीं करता है। –

0

मेरे पास इसका परीक्षण करने के लिए कोई मशीन नहीं है, लेकिन %HOMESHARE% आपके लिए काम कर सकता है। अन्यथा, यहां एक बहुत अच्छा list of environment variables है।

3

नीचे पंक्ति का उत्तर नंबर है। होम निर्देशिका प्राप्त करने के लिए .NET में कोई सरल सिस्टम आधारित विधि नहीं है, जिसे हम विंडोज़ और मोनो दोनों में .NET में कार्यान्वयन की उम्मीद कर सकते हैं।

आपको ओएस विशिष्ट कोड में कुछ ओएस पहचान और शाखा करने की आवश्यकता होगी।

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

व्यक्तिगत मेरे दस्तावेज़ (या Win7 में दस्तावेज़) है।

+8

ध्यान दें कि यदि आप .NET 2.0/3.5 का उपयोग करते हैं, तो UserProfile .NET 4.0 में नया है, तो आपको UserProfile – linquize

+0

के लिए मान 40 के साथ मैन्युअल रूप से Win32 API को कॉल करना होगा और "मेरा दस्तावेज़" होम निर्देशिका के समान नहीं है, सिवाय इसके कि विंडोज 95, 98 और एमई। –

+1

पोर्टेबल रखने के लिए System.IO.Path.DirectorySeparatorChar का उपयोग करने के लिए अपने फ़ाइल पथ का निर्माण करने के लिए मत भूलना। – thomiel

0

प्रस्ताव: C:\\\\Users\\myusername\\myFolder

ध्यान दें कि यह विफल रहता है अगर आप

var fullHomePath = Path.Combine(homeDrive.ToString(), homePath.ToString()) 

का उपयोग कारण यह पैदा करता है: \\Users\\myusername\\myFolder

4

DotNetCore 1.1 में

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'"); 
} 

तो यह खिड़कियों के नीचे का उत्पादन System.Environment.SpecialFolder exi नहीं है सेंट। यह 2.0-बीटा में मौजूद हो सकता है। तब तक, ऐसा करने के लिए आप निम्न का उपयोग कर सकते हैं:

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

मैं 2.0 और 'सिस्टम का उपयोग कर रहा हूं। पर्यावरण। SpecialFolder' मौजूद है – snotyak

संबंधित मुद्दे