2012-01-06 13 views
5

एमएस विस्टा पर विंडोज सेवा से उपयोगकर्ता फ़ोल्डर का मार्ग कैसे प्राप्त करें? मुझे सी के पथ के बारे में लगता है: \ उपयोगकर्ता निर्देशिका, लेकिन यह अलग-अलग स्थान सिस्टम स्थानीयकरण पर निर्भर हो सकता है।उपयोगकर्ता निर्देशिका का पथ प्राप्त करना

+0

क्या आप किसी विशेष उपयोगकर्ता के लिए विशेष घर पथ चाहते हैं? इस बात की कोई गारंटी नहीं है कि सभी उपयोगकर्ताओं के पास एक ही स्थान पर उनके घर फ़ोल्डर्स होंगे। (उदाहरण के लिए रिमोट होम फ़ोल्डर्स।) –

उत्तर

11

Environment.SpecialFolder Enumeration पर एक नज़र डालें, उदा।

Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory); 

आप चाहते हैं विशेष फ़ोल्डर के लिए समायोजित करें। हालांकि, here में एक और पोस्ट पढ़ने में, ऐसा लगता है कि यदि आप सी: \ उपयोगकर्ताc: \ users \ public के बजाय, उदाहरण के लिए, आपको स्ट्रिंग के थोड़ा हेरफेर करने की आवश्यकता हो सकती है।

7

System.Environment.SpecialFolder आप इन सभी फ़ोल्डरों जैसे मेरे दस्तावेज़, आदि के रूप में है कि आप चाहते हैं, के लिए पहुँच प्रदान करेगा ..

आप UserProfile SpecialFolder उपयोग करते हैं, कि तुम पथ आपकी प्रोफ़ाइल के तहत देना चाहिए उपयोगकर्ता।

string userPath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); 
0

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

1

मुझे लगता है कि समारोह नेट के संपर्क में नहीं देख सकते हैं, लेकिन सी में (++) यह होगा

SHGetKnownFolderPath(FOLDERID_UserProfiles, ...) 
2

@Neil ने इंगित किया है कि FOLDERID_UserProfiles के साथ सबसे अच्छा तरीका है। हालांकि, सी # में यह नहीं है। लेकिन, इसे आमंत्रित करना मुश्किल नहीं है:

using System; 
using System.Runtime.InteropServices; 

namespace SOExample 
{ 
    public class Main 
    { 
     [DllImport("shell32.dll")] 
     static extern int SHGetKnownFolderPath([MarshalAs(UnmanagedType.LPStruct)] Guid rfid, uint dwFlags, IntPtr hToken, out IntPtr pszPath); 

     private static string getUserProfilesPath() 
     { 
      // https://msdn.microsoft.com/en-us/library/windows/desktop/dd378457(v=vs.85).aspx#folderid_userprofiles 
      Guid UserProfilesGuid = new Guid("0762D272-C50A-4BB0-A382-697DCD729B80"); 
      IntPtr pPath; 
      SHGetKnownFolderPath(UserProfilesGuid, 0, IntPtr.Zero, out pPath); 

      string path = System.Runtime.InteropServices.Marshal.PtrToStringUni(pPath); 
      System.Runtime.InteropServices.Marshal.FreeCoTaskMem(pPath); 
      return path; 
     } 

     static void Main(string[] args) 
     { 
      string path = getUserProfilesPath(); // C:\Users 
     } 
    } 
} 
संबंधित मुद्दे