2009-03-23 20 views
66

मेरे पास एक ही फ़ोल्डर में दो exe फ़ाइलें हैं, मैं exe1 में एक बटन से exe2 चला सकता हूं। आज मैं एक रिमोट (टर्मिनल सेवाएं) सत्र पर एक ग्राहक को देख रहा था और exe2 'फ़ाइल नहीं मिली' त्रुटि चलाने में विफल रहा, फिर भी जब हमने जांच की तो exe1 उसी निर्देशिका में था। तो क्या मुझे AppDomain.CurrentDomain.BaseDirectory या System.Environment.CurrentDirectory का उपयोग करना चाहिए?क्या मुझे AppDomain.CurrentDomain.BaseDirectory या System.Environment.CurrentDirectory का उपयोग करना चाहिए?

धन्यवाद

+0

@Jade एम कैसे आप टर्मिनल पर अपने exe1 को क्रियान्वित कर रहे हैं? –

+0

मैं कहकर अपने दो सेंट जोड़ना चाहता हूं कि 'string.GetFullPath (पथ)' मेरे आश्चर्य के लिए 'CurrentDomain.BaseDirectory' की बजाय' Environment.CurrentDirectory' का उपयोग करता है। – JBSnorro

उत्तर

6

मैं यह समझ के रूप में, आप BaseDirectory उपयोग करना चाहिए। CurrentDirectory प्रोग्राम के निष्पादन के दौरान बदल सकता है।

145

यदि आप अपने आवेदन के समान निर्देशिका में फ़ाइलों को ढूंढना चाहते हैं, तो AppDomain.CurrentDomain.BaseDirectory सही विकल्प है।

Environment.CurrentDirectory एक ऐसा मूल्य है जो आपके आवेदन को चलाने के दौरान बदल सकता है और बदल जाएगा। उदाहरण के लिए, डिफ़ॉल्ट पैरामीटर का उपयोग करके, WinForms में OpenFileDialog इस मान को उस निर्देशिका में बदल देगा जहां फ़ाइल से चुना गया था।

  string AppPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); 
      AppPath = AppPath.Replace("file:\\", ""); 
+6

मेरी इच्छा है कि मैं आपको इस पर एक से अधिक बार वोट दे सकता हूं। – David

+0

मैंने OpenFileDialog दिखाने के लिए बटन 1 का उपयोग किया, फिर पर्यावरण 2 को दिखाने के लिए बटन 2। वर्तमान डायरेक्टरी, लेकिन अभी भी डीबग फ़ोल्डर दिखाएं, क्यों? –

2

मैं आमतौर पर की तरह कुछ का उपयोग करें। सिस्टम। पर्यावरण। CurrentDirectory वर्तमान सिस्टम निर्देशिका देता है। आपके मामले में AppDomain.CurrentDomain.BaseDirectory सबसे अच्छा समाधान है।

14

AppDomain.CurrentDomain.BaseDirectory जहां वर्तमान आवेदन डोमेन लोड किया गया था से निर्देशिका रिटर्न:

+1

स्पष्ट होने के लिए, System.Environment.CurrentDirectory वर्तमान (प्रक्रिया-विशिष्ट) _working_ निर्देशिका देता है। –

3

विजुअल स्टूडियो 2010 परीक्षण परियोजनाओं में, यदि आप टेस्ट रिसेट्स \ आउट फ़ोल्डर (bin \ debug नहीं) पर संपादन परीक्षण सेटिंग्स, AppDomain.CurrentDomain.BaseDirectory बिंदुओं के परिनियोजन विकल्प सक्षम करते हैं। हालांकि, डिफ़ॉल्ट सेटिंग बिन \ डीबग फ़ोल्डर को इंगित करती है।

यहां मुझे विश्वासपूर्ण उत्तर मिला।

Why AppDomain.CurrentDomain.BaseDirectory not contains "bin" in asp.net app?

10

आप AppDomain.CurrentDomain.BaseDirectory उपयोग करना चाहिए।

एक खिड़कियों सेवाओं आवेदन में उदाहरण के लिए: \ Windows \ system32 जबकि

AppDomain.CurrentDomain.BaseDirectory [आवेदन वापस आ जाएगी:

System.Environment.CurrentDirectoryसी वापस आ जाएगी।exe स्थान]

एक अन्य महत्वपूर्ण कारक ध्यान दें कि AppDomain.CurrentDomain.BaseDirectory एक केवल पढ़ने के लिए संपत्ति है Environment.CurrentDirectory कुछ और हो सकता है, जबकि यदि आवश्यक है:

// Change the directory to AppDomain.CurrentDomain.BaseDirectory 
Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory; 
0

मैं भी लें, तो इस कुछ दिनों के माध्यम से किया गया है के रूप में मैं उपयोग कर रहा था

Environment.CurrentDirectory 

के रूप में यह मेरे उत्पादन सर्वर पर इस मुद्दे को दे रहा था लेकिन मेरे स्थानीय सर्वर के साथ ठीक काम कर रहा था,

इसलिए, मैंने

System.AppDomain.CurrentDomain.BaseDirectory; 

और यह दोनों पर्यावरण में मेरे लिए काम किया।

तो, जैसा कि उन सभी को कहा है हम हमेशा

System.AppDomain.CurrentDomain.BaseDirectory; 

के साथ जाना चाहिए क्योंकि यह पथ के लिए वर्तमान डोमेन निर्देशिका जाँच करता है।

अधिक जानकारी के लिए एक नजर है

Could not find a part of path error on server

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