2009-05-30 16 views
15

OpenFileDialog मेरी कार्यशील निर्देशिका क्यों बदलता है? क्या मुझे सिस्टम में कई func लगता है। Windows.Forms मेरी कार्यशील निर्देशिका बदल जाएगा?OpenFileDialog मेरी कार्यशील निर्देशिका क्यों बदलता है?

OpenFileDialog open = new OpenFileDialog(); 
    open.Filter = filter; 
    a = Directory.GetCurrentDirectory(); //<-- correct 
    if (open.ShowDialog() == DialogResult.OK) //-- select a file on my desktop 
    { 
     a = Directory.GetCurrentDirectory(); //<-- incorrect, is set to my desktop 

उत्तर

6

वर्तमान कार्य निर्देशिका रनटाइम के दौरान बदल सकती है, हां।

Directory.GetParent(Assembly.GetExecutingAssembly().Location) 

या

System.AppDomain.CurrentDomain.BaseDirectory 

का उपयोग करते समय आप अपने अनुप्रयोगों निर्देशिका की जरूरत पर विचार करें।

+0

हे, न कि आसान रीसेट। जब मुझे आवश्यकता हो तो मैं बस प्राप्त/सेट का उपयोग करता हूं। मैं कामकाजी निर्देशिका सेट करने के लिए एमएसवीएस का उपयोग करता हूं, इसलिए यह पता लगाने के लिए कोई संभावित तरीका नहीं है कि यह कहां होना चाहिए (जब तक कि मैं इसे exe में हार्डकोड नहीं करता) –

7

यह एक दर्द है, हालांकि कुछ तरीकों से आप इसकी उम्मीद कर सकते हैं ... यदि आप एक खुले संवाद में कई बार (एक ऐप में) जाते हैं तो आप अक्सर इसे छोड़ देते हैं जहां आपने इसे अंतिम बार छोड़ा था।

यदि यह आपके कोड को प्रभावित करता है, तो आप संवाद में जाने से पहले GetCurrentDirectory() का एक स्नैपशॉट ले सकते हैं, और बाद में इसे पुनर्स्थापित कर सकते हैं (इसलिए आपका कोड परिवर्तन नहीं देखता है)। आप उपयोगकर्ता की कार्य निर्देशिका को अलग से स्टोर करना चाहते हैं (और उन्हें स्वैप करें) ताकि उपयोगकर्ता को उनके अपेक्षित व्यवहार भी मिल सकें।

+0

ठीक वही करता है जो मैंने किया था। यह आश्चर्यजनक था कि यह हुआ। मुझे यह देखकर खुशी हो रही है कि आपको लगता है कि यह भी दर्द है। –

+0

कि OpenFileDialog उसी फ़ोल्डर में खुलता है अगली बार जब आप उसी ऐप में जाते हैं तो इस तथ्य से कोई लेना-देना नहीं है कि यह वर्तमान निर्देशिका सेट करता है। यह कुछ विंडोज़ उन जादूओं (शायद रजिस्ट्री में कहीं भी) के लिए अंतिम निर्देशिका को याद रखने के लिए जादू में निर्मित है। – ChrisWue

8

हमने वर्तमान प्रोजेक्ट में जो खोजा है वह यह है कि OpenFileDialog अब संपत्ति को बनाने, वर्तमान निर्देशिका को बदलता नहीं है .स्टोर डायरेक्टरी अप्रचलित। एप्लिकेशन में कोड जब भी हम एक फ़ाइल खोलते हैं (जब Windows XP में चलते हैं) वर्तमान निर्देशिका को बदलने के लिए उपयोग किया जाता है। यह अब विंडोज 7 में ऐसा नहीं करता है। नतीजतन यह हमारे आवेदन को तोड़ दिया क्योंकि अब हमारे डेटासेट को पता नहीं है कि फाइल किस निर्देशिका में है जब हम पूर्ण पथ के बिना फ़ाइल नाम का उपयोग करके इसे deserialize करने का प्रयास करते हैं। अगर आप खिड़कियों पर माइग्रेट करने की योजना बना रहे हैं तो बस सावधानी बरतें।

+2

अच्छा भगवान, मुझे इस पागलपन के साथ लगभग 3 घंटों तक लड़े जाने के बाद यह टिप्पणी मिली, यह समझने की कोशिश कर रहा था कि क्यों एक झटकेदार फ़ाइल संवाद के लिए एक्सपी और विंडोज 7 पर बिल्ली का व्यवहार अलग-अलग व्यवहार कर रहा था। – Galactus

+0

मैं सोच रहा था कि निष्पादित क्यों करें। \ Foo.exe XP पर काम नहीं किया :) – paulm

0

क्यों XP में दायरियलॉग वर्तमान निर्देशिका को बदलता है, तो एमएस से पूछना बेहतर है। वैसे भी XP में खुले फ़ाइल संवाद में यह अजीब व्यवहार है, लेकिन W7 या उच्चतम में नहीं। ताकि आप SaveFileDialog से चुने गए पथ को सहेजने के बाद वर्तमान निर्देशिका को सेट कर सकें, यह वर्तमान निर्देशिका को बदलता है।

मैं अपने विधि पोस्ट जहां आप देख सकते है कि पथ chosed सेटिंग्स को सहेजा जाता है और वर्तमान निर्देशिका

private void ShowSaveFileDialog(object sender, RoutedEventArgs e) 
    {  
     private const int xpVerMajorNumber = 5;   
     var saveFileDialog = new SaveFileDialog() 
     {     
      FileName = Settings.Default.ExcelFileName, 
      DefaultExt = "*.xlsx", 
      Filter = "Excel Workbook (.xlsx)|*.xlsx" 
     }; 

     if (saveFileDialog.ShowDialog(this) == true) 
      Settings.Default.ExcelFileName = saveFileDialog.FileName; 


     if (Environment.OSVersion.Version.Major <= xpVerMajorNumber) 
     { 
     Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory); 
     } 

    } 
+0

यह प्रश्न का उत्तर प्रदान नहीं करता है। ओपी जानना चाहता था ** क्यों ** – lokusking

+0

मुझे लगता है कि अब हाँ – luka

+0

1) अन्य उत्तरों ने कहा कि सभी को कहा जाना चाहिए 2) XP अब ओएस 3 के समर्थन के रूप में नहीं है) सवाल 7 साल पुराना है क्यों आप जवाब दे रहे हैं! –

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