क्या मुझे AppDomain.CurrentDomain.BaseDirectory या System.Environment.CurrentDirectory का उपयोग करना चाहिए?


86

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

धन्यवाद


@ जेड एम आप अपने एक्स 1 को टर्मिनल पर कैसे निष्पादित कर रहे हैं?
सुश्री सोनिया

मैं यह कहकर अपने दो सेंट जोड़ना चाहता हूं जो मेरे आश्चर्य के बजाय string.GetFullPath(path)उपयोग करता है । Environment.CurrentDirectoryCurrentDomain.BaseDirectory
JBSnorro

जवाबों:


185

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

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


मैंने Open1ileDialog दिखाने के लिए Button1 का उपयोग किया, फिर पर्यावरण को दिखाने के लिए Button2 का उपयोग किया। CurrentDirectory, लेकिन फिर भी डिबग फ़ोल्डर दिखाएं, क्यों?
लेई यांग

18

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


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

14

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

एक विंडोज़ सेवाओं के आवेदन में उदाहरण के लिए:

System.Environment.CurrentDirectoryC: \ Windows \ system32 वापस आ जाएगा

जबकि

AppDomain.CurrentDomain.BaseDirectory वापस आएगा [Application.exe स्थान]

नोट करने के लिए एक और महत्वपूर्ण कारक यह है कि AppDomain.CurrentDomain.BaseDirectoryएक पठनीय संपत्ति है जबकि Environment.CurrentDirectoryआवश्यक होने पर कुछ और हो सकता है:

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

6

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


3

Visual Studio 2010 परीक्षण प्रोजेक्ट्स में, यदि आप संपादन परीक्षण सेटिंग्स, AppDomain.CurrentDomain.BaseDirectory पॉइंट को TestResults \ Out फ़ोल्डर (न कि बिन \ डीबग) के परिनियोजन विकल्प को सक्षम करते हैं। हालांकि, डिफ़ॉल्ट सेटिंग बिन \ डीबग फ़ोल्डर को इंगित करता है।

यहाँ मुझे ठोस उत्तर मिला।

AppDomain.CurrentDomain.BaseDirectory में asp.net ऐप में "बिन" क्यों नहीं है?


2

मैं आमतौर पर कुछ का उपयोग करता हूं जैसे:

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

2

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

Environment.CurrentDirectory

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

इसलिए, मैंने कोशिश की

System.AppDomain.CurrentDomain.BaseDirectory;

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

इसलिए, जैसा कि उन सभी ने कहा है कि हमें हमेशा साथ चलना चाहिए

System.AppDomain.CurrentDomain.BaseDirectory;

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

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

सर्वर पर पथ त्रुटि का एक हिस्सा नहीं मिल सका

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.