2012-06-12 15 views
41

मैं सांत्वना आवेदन नीचे कोड का उपयोग कर की सूची प्राप्त करने की कोशिश,कैसे सांत्वना आवेदन के निष्पादन निर्देशिका

Assembly.GetExecutingAssembly().Location 

प्राप्त करने के लिए, लेकिन यह भी मुझे देता है जहां बसता था इकट्ठा। यह अलग-अलग हो सकता है जहां से मैंने एप्लिकेशन को निष्पादित किया था।

मेरा कंसोल एप्लिकेशन किसी पैरामीटर के साथ लॉग को पार करता है। इसे निष्पादन योग्य फ़ोल्डर के अंदर logs/ फ़ोल्डर में जाना चाहिए या यदि मैं इसे logs/ पर पथ देता हूं तो यह इसे पार करता है।

+0

के साथ इस सवाल पर एक नज़र डालें: http://stackoverflow.com/questions/ 674857/चाहिए-i-use-appdomain-currentdomain-basedirectory-or-system-environment-current – Karsten

उत्तर

69

Environment.CurrentDirectory का उपयोग करें।

वर्तमान कार्य निर्देशिका के पूर्ण योग्यता प्राप्त पथ को प्राप्त या सेट करता है। बारlogsDirectory \ foo \ ग को इंगित करेंगे:
(MSDN Environment.CurrentDirectory Property)

string logsDirectory = Path.Combine(Environment.CurrentDirectory, "logs"); 

अपने आवेदन में सी चल रहा है \ foo \ बार \ लॉग

+15

वर्तमान निर्देशिका direc से अलग है वर्तमान निष्पादन योग्य युक्त टोरी। – KFL

+0

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

6

सबसे सुरक्षित तरीका:

string temp = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase); 
+3

से चुनी गई थी, कोडबेस उस स्थान पर एक यूआरएल है जहां फ़ाइल मिली थी, जबकि स्थान वास्तव में वह जगह है जहां से यह वास्तव में था लदा हुआ। उदाहरण के लिए, यदि इंटरनेट से असेंबली डाउनलोड की गई थी, तो इसका कोडबेस "http: //" से शुरू हो सकता है, लेकिन इसका स्थान "सी: \" से शुरू हो सकता है। अगर फ़ाइल छाया की प्रतिलिपि बनाई गई थी, तो स्थान छाया-प्रतिलिपि dir में फ़ाइल की प्रतिलिपि का मार्ग होगा। यह जानना भी अच्छा है कि कोडबेस को जीएसी में असेंबली के लिए सेट करने की गारंटी नहीं है। स्थान, डिस्क से लोड असेंबली के लिए हमेशा सेट किया जाएगा। –

+0

यह सुनिश्चित करने के लिए कि फ़ाइल डिस्क पर है, मैं इस फ़ाइल का उपयोग 'फ़ाइल: //' पथ के बजाय "नियमित" पथ प्राप्त करने के लिए करता हूं: 'पथ। गेट डायरेक्टरी नाम (नया उरी (यह। गेट टाइप()। Assembly। गेटनाम() .CodeBase) .लोकलपैथ) ' – Timo

16

इस का उपयोग करें:

System.Reflection.Assembly.GetExecutingAssembly().Location 

कम्बाइन कि

System.IO.Path.GetDirectoryName if all you want is the directory. 
+2

[स्रोत] (http://stackoverflow.com/a/837501/397322) – William

+0

यदि मैं पर्यावरण का उपयोग करता हूं। कंटेंट डायरेक्टरी जो अनुसूचित कार्य के तहत चलती है, तो यह सी: \ विंडोज \ system32 \ लॉग जो निष्पादन पथ नहीं है। फिर मैं इस सिस्टम का उपयोग करता हूं। रिफ्लेक्शन.एस्प्लोर्स। गेटएक्सिंगिंगएस्परब्स()। स्थान, यह मेरे सही एक्सई निष्पादन पथ को इंगित करता है। धन्यवाद! – LifeiSHot

+0

यह काम नहीं कर सकता क्योंकि आप यूनिट परीक्षण या स्थानीय आईआईएस चलाने वाली वेब परियोजनाओं में आशा करते हैं। 'कोडबेस' उत्तर करता है। – Timo

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