2012-09-05 19 views
6

के साथ FolderBrowserDialog चयनितपैथ जब मैं फ़ोल्डर को चुनने वाले फ़ोल्डर को दूरस्थ सर्वर पर चुनता हूं और एक प्रतीकात्मक लिंक (या किसी भी प्रकार का प्रतिकूल बिंदु) है, तो मुझे फ़ोल्डर ब्रॉउडरडियलॉग की चयनितपैथ संपत्ति के साथ समस्याएं आ रही हैं।रिपेयर पॉइंट्स

यदि मैं एक सामान्य फ़ोल्डर का चयन करता हूं, तो मुझे पूरा पथ वापस लौटाया जाता है, उदाहरण के लिए "\ SERVER \ folder \ subfolder \ thing_I_clicked_on"।

हालांकि, अगर फ़ोल्डर रिपार्स बिंदु है, मैं सिर्फ "\ सर्वर \ thing_I_clicked_on" मिल

var dialog = new FolderBrowserDialog(); 
dialog.ShowDialog(); 
MessageBox.Show(dialog.SelectedPath); 

कोई भी इस पार चलो या कोई सुझाव हैं (इसलिए यह पूरा पथ याद आ रही है)? यह अनुमतियों से संबंधित प्रतीत नहीं होता है, जैसे कि मुझे पूरा पथ पता है, मैं इसे आसानी से ब्राउज़ कर सकता हूं, आदि

+0

आप के रूप में कार्यक्रम चल रहे हैं। व्यवस्थापक या कुछ? शायद कुछ यूएनसी सामान चल रहा है ... मुझे यकीन नहीं है लेकिन यह मेरा विचार था –

+0

व्यवस्थापक के रूप में चलने से कोई फर्क नहीं पड़ता मुझे डर लगता है :( –

उत्तर

2

इसलिए, मैं इसकी बहुत जांच कर रहा हूं, और मुझे लगता है कि मेरे पास जवाब है।

सबसे पहले, मैं जो देख रहा था उसके बारे में कुछ स्पष्टीकरण!

सर्वर एक पर

, वहाँ एक हिस्सा है जो सर्वर बी पर एक साझा करने के लिए एक प्रतीकात्मक लिंक होता है:

\\serverA\Path\To\Folder 

और उस का लक्ष्य

\\serverB\Folder 

वास्तव में क्या हो रहा था था, FolderBrowserDialog.SelectedPath से लौटाया गया मूल्य \\serverB\Folder था, और मैं गलती से सोच रहा था कि यह पथ के हिस्सों को खो रहा था, क्योंकि स्ट्रिंग्स सर्वरए और सर्वरबी बहुत समान हैं! हर किसी को गुमराह करने के लिए खेद है।

मैं इस MSDN Example निम्नलिखित मेरे अपने आवरण बनाया और पाया है कि shell32.dll समारोह SHGetPathFromIDList रिपार्स पॉइंट के लक्ष्य लौटा रहा है, तथ्य यह है कि प्रलेखन कहते हैं

pidl पैरामीटर एक शॉर्टकट निर्दिष्ट करता है के बावजूद , pszPath शॉर्टकट के लिए पथ में शामिल होंगे, शॉर्टकट के लक्ष्य के लिए नहीं

मैं सूचना है कि सही है, हालांकि, इसलिए मेरे कॉलबैक विधि में जब स्थिति बदल है कि इससे पहले कि पथ था, मैं पर कब्जा कर लिया ग़ैर-अनुवादित चयनित पथ

private int FolderBrowserCallback(IntPtr hwnd, int msg, IntPtr lParam, IntPtr lpData) 
     { 
      switch (msg) 
      { 
       case BrowseForFolderMessages.BffmSelchanged: 
        if (haveValidPath && !String.IsNullOrEmpty(displayedPath)) 
           { 
            if (IntPtr.Zero != _hwndEdit) 
            { 
             SelectedFullPath = displayedPath; 
            } 
     } 

तो SelectedFullPath संपत्ति \\serverA\Path\To\Folder होता है और SelectedPath संपत्ति \\ServerB\Folder जो मेरे साथ काम करने के लिए एक बहुत छोड़ देता है,।

1

How do I programmatically access the target path of a windows symbolic लिंक यहां होना चाहिए। क्या आप सुनिश्चित हैं कि आपको बिल्कुल सही पथ की आवश्यकता है, न कि बिंदु को पीछे हटाना? मुझे लगता है कि आप इसके बजाय इस पथ का उपयोग कर सकते हैं। "नोटिथैट विंडोज रिमोट शेयरों पर निर्देशिकाओं के जंक्शनों का समर्थन नहीं करता है।" proof

+0

हाय - चाहे पूर्ण या सापेक्ष, मुझे पूरे पथ की आवश्यकता है, जो मैं प्राप्त कर रहा हूं वह नहीं है। लिंक के लिए धन्यवाद - विंडोज़ पूरी तरह से दूरस्थ निर्देशिकाओं के प्रतीकात्मक लिंक की इजाजत देता है हालांकि (जंक्शन और सिम्बलिक लिंक दोनों रिपर्स पॉइंट हैं लेकिन समान नहीं हैं): mklink/DC: \ blah \\ सर्वर \ path \ \ blah –

+0

हा! ऐसा लगता है कि यह उत्तर है: [link] (http://blogs.msdn.com/b/oldnewthing/archive/2010/02/12/9962359.aspx) – cdmnk

1

एंडी का जवाब ऐसा लगता है कि विवरण गायब होने के अलावा काम करेगा, और मैं यह नहीं समझ सकता कि एमएसडीएन उदाहरण कोड में अपना कोड स्निपेट कहां जोड़ना है। मैं काम करने के लिए "एमएसडीएन नमूना" कोड प्राप्त कर सकता हूं, बस यह नहीं पता कि एंडी की सामग्री में कहां जाना है।

तो ... आप में से उन लोगों के लिए जो मुझे उपरोक्त कोड के साथ क्या करना है, यह पता नहीं लगा सकता है, (मैं वास्तव में चाहता हूं कि मुझे पता था कि मैं क्या कर रहा था;) यहां एक प्रकार का लंगड़ा समाधान समाधान है।

browsforfolder के बदले दायरियल क्लास का उपयोग करें और सेट करें;

  • DereferenceLinks संपत्ति = false
  • CheckFileExists = false
  • फ़ाइल नाम = एक फर्जी डिफ़ॉल्ट फ़ाइल नाम। (उपयोगकर्ता को यह पता होना चाहिए कि इससे कोई फ़र्क नहीं पड़ता कि फ़ाइल का नाम क्या है, क्योंकि वे सिर्फ एक फ़ोल्डर चुन रहे हैं।)
  • या तो OpenFileDialog, या SaveFileDialog का उपयोग करें।

ध्यान दें कि जब यह हो जाए, अगर एक पुराने जमाने खिड़कियां शॉर्टकट पर उपयोगकर्ता क्लिक करता है (* .lnk) यह (शॉर्टकट), फ़ाइल नाम के रूप में वापस कर दी जाएगी ताकि आप उस के लिए खाते में करना होगा।

आशा इस मदद करता है;) (मैं कुछ "प्रतिष्ठा" हो रही पर काम करेंगे तो मैं एंडी की पोस्ट पर टिप्पणी कर सकते हैं उसके जवाब के लिए विवरण प्राप्त करने के बाद से यह वास्तव में अच्छा लग रहा है)

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