2010-04-07 16 views
13

मुझे पथ प्राप्त करने की आवश्यकता है (निष्पादन योग्य नहीं) जहां मेरा एप्लिकेशन चल रहा है:निष्पादन योग्य निर्देशिका जहां से एप्लिकेशन चल रहा है?

System.AppDomain.CurrentDomain.BaseDirectory() 

जब मैं उपरोक्त कथन को अपनी स्थानीय मशीन पर & "/images/image.jpg" के साथ चलाता हूं तो यह ठीक काम करता है लेकिन जब मैं किसी अन्य मशीन पर एप्लिकेशन इंस्टॉल करता हूं तो यह कहता है कि यह फ़ाइल नहीं ढूंढ सकता है और कुछ अतिरिक्त पथ जानकारी है।

मुझे बस उस निर्देशिका की आवश्यकता है जहां ऐप चल रहा है। मैं विजुअल स्टूडियो 2008 के साथ वीबी.नेट में कोडिंग कर रहा हूं। Xzx18

धन्यवाद!

+0

बनाम 2008 के बारे में बहुत कुछ नहीं जानता है, लेकिन जब आप एक डिरिन्फो नहीं करते हैं तो आपको ऐप से डायरिन्फो नहीं मिलता है। दौड रहा है? – Grumpy

+0

संभावित प्रोग्राम डुप्लिकेट [प्रोग्राम पथ प्राप्त करें?] (Http://stackoverflow.com/questions/2216141/get-programs-path) –

उत्तर

26
Dim strPath As String = System.IO.Path.GetDirectoryName(_ 
    System.Reflection.Assembly.GetExecutingAssembly().CodeBase) 

से HOW TO: Determine the Executing Application's Path (MSDN)

+6

strPath में ** फ़ाइल ** है: \\ c: \\ xxxxxx – Kraken101

+0

यह सुरक्षित नहीं है, उदाहरण के लिए जब इसे कॉन्फ़िगरेशन फ़ाइल खोलने के लिए उपयोग किया जा रहा है, तो यह 'System.Configuration.ConfigurationErrorsException: कॉन्फ़िगरेशन फ़ाइल लोड करने में त्रुटि हुई: यूआरआई प्रारूप समर्थित नहीं हैं –

+0

श्री कैल्विन का जवाब उस मामले में ठीक काम कर रहा है –

0

आप निम्न लिख सकते हैं:

Path.Combine(Path.GetParentDirectory(GetType(MyClass).Assembly.Location), "Images\image.jpg") 
+1

इस दृष्टिकोण के लिए नुकसान हैं क्योंकि असेंबली निष्पादन के समान निर्देशिका में जरूरी नहीं है सभा। –

4

लिया आप आवेदन वर्ग के स्थिर StartupPath संपत्ति इस्तेमाल कर सकते हैं।

12
Dim P As String = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase) 
P = New Uri(P).LocalPath 
20

यह Google पर पहली पोस्ट है इसलिए मैंने सोचा कि मैं उपलब्ध विभिन्न तरीकों को पोस्ट करूंगा और उनकी तुलना कैसे करूं। दुर्भाग्य से मैं यह नहीं समझ सकता कि यहां एक टेबल कैसे बनाएं, इसलिए यह एक छवि है। प्रत्येक के लिए कोड पूरी तरह से योग्य नामों का उपयोग कर छवि के नीचे है।

enter image description here

My.Application.Info.DirectoryPath 

Environment.CurrentDirectory 

System.Windows.Forms.Application.StartupPath 

AppDomain.CurrentDomain.BaseDirectory 

System.Reflection.Assembly.GetExecutingAssembly.Location 

System.Reflection.Assembly.GetExecutingAssembly.CodeBase 

New System.UriBuilder(System.Reflection.Assembly.GetExecutingAssembly.CodeBase) 

Path.GetDirectoryName(Uri.UnescapeDataString((New System.UriBuilder(System.Reflection.Assembly.GetExecutingAssembly.CodeBase).Path))) 

Uri.UnescapeDataString((New System.UriBuilder(System.Reflection.Assembly.GetExecutingAssembly.CodeBase).Path)) 
6

मैं यह जानता हूँ करने के लिए आवश्यक है और यहाँ आया था, इससे पहले कि मैं पर्यावरण वर्ग याद किया।

किसी और के पास यह समस्या होने पर, बस इसका उपयोग करें: Environment.CurrentDirectory

उदाहरण:

Dim dataDirectory As String = String.Format("{0}\Data\", Environment.CurrentDirectory) 

जब डिबग मोड yeilds में दृश्य स्टूडियो से चलाएँ:

C:\Development\solution folder\application folder\bin\debug 

यह सही व्यवहार मैं जरूरत है, और इसकी सरल और सीधा पर्याप्त।

+1

स्वरूपण के साथ सबसे छोटा, आसान समाधान! +1, धन्यवाद। – rdtsc

+0

हां, आवेदन फ़ाइल के रूट पथ में सेटिंग्स फ़ाइल को रखकर, एप्लिकेशन को वास्तव में पोर्टेबल बनाने में मदद करता है। सरल समाधान के लिए धन्यवाद! –

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