2009-09-09 14 views
64

मैं एक विंडोज़ अनुप्रयोग में एक सापेक्ष पथ को एक पूर्ण पथ में कैसे परिवर्तित करूं?विंडोज अनुप्रयोग में एक सापेक्ष पथ को एक पूर्ण पथ में कैसे परिवर्तित करें?

मैं जानता हूँ कि हम ASP.NET में Server.MapPath() का उपयोग कर सकते हैं। लेकिन हम विंडोज़ एप्लिकेशन में क्या कर सकते हैं?

मेरा मतलब, अगर वहाँ है एक .NET में निर्मित समारोह है कि संभाल कर सकते हैं कि ...

+1

क्या आपका मतलब वर्तमान निर्देशिका का एक सापेक्ष पथ है, दूसरे शब्दों में काम करने वाली निर्देशिका, या .exe के स्थान से संबंधित है? –

+1

दो प्रकार के सापेक्ष पथ हैं। एक "ए \ बी \ सी" फॉर्म के रूप में और एक विशेष आधार का मतलब नहीं है। दूसरे में फॉर्म "। \ ए \ बी" या ".. \ ए \ बी" है; वे वर्तमान कार्य निर्देशिका के सापेक्ष हैं। – MSalters

+0

@ एमिट ढल: वैसे, यह आपकी मदद करने वाले उत्तर (ओं) को स्वीकार करने और उन्हें ऊपर उठाने के लिए अच्छी बात है। –

उत्तर

129

आप की कोशिश की है:

string absolute = Path.GetFullPath(relative); 

? ध्यान दें कि वह प्रक्रिया की वर्तमान कार्यशील निर्देशिका का उपयोग करेगा, न कि निष्पादन योग्य वाली निर्देशिका। अगर इससे मदद नहीं मिलती है, तो कृपया अपने प्रश्न को स्पष्ट करें।

+2

क्या यह इस बात पर निर्भर नहीं करेगा कि आप कहां से ऐप शुरू करते हैं, इस पर निर्भर नहीं है कि एक्सई कहां स्थित है? माना जाता है कि सवाल उस पर वास्तव में स्पष्ट नहीं है। –

+0

जैसा कि आप कहते हैं, सवाल स्पष्ट नहीं है। GetFullPath वर्तमान कार्यशील निर्देशिका से हल हो जाएगा। मैं इसे इंगित करने के लिए अपनी प्रतिक्रिया संपादित कर दूंगा। –

+0

यदि Windows Explorer के माध्यम से कोई एप्लिकेशन प्रारंभ होता है तो ऐसा लगता है कि वर्तमान निर्देशिका और निष्पादन असेंबली निर्देशिका समान हैं (कम से कम जब तक उन्हें अलग करने के लिए कुछ नहीं किया जाता है)। यह तब भी सही है जब आप निष्पादन योग्य को शॉर्ट-कट का उपयोग करते हैं जहां शॉर्ट-कट कहीं अलग है। – H2ONaCl

17

आप प्राप्त करना चाहते हैं अपने .exe के लिए पथ रिश्तेदार तो का उपयोग

string absolute = Path.Combine(Application.ExecutablePath, relative); 
+1

या, अधिक आम तौर पर, पथ। कॉम्बाइन (myBasePath, रिश्तेदार) ... –

+3

बस पथ। कॉम्बिन से सावधान रहें। यदि 'रिश्तेदार' भाग स्लैश के साथ शुरू होता है, तो ऐसा नहीं हो सकता है जो आप सोचते हैं। –

+1

@silky: ठीक है, तो यह सापेक्ष नहीं है, है ना? –

11

यह एक अलग ड्राइव, ड्राइव-संबंधित पथ के लिए पर पथ के लिए और वास्तविक संबंधित पथ के लिए काम करता है। बिल्ली, यह भी काम करता है अगर basePath वास्तव में पूर्ण नहीं है; यह हमेशा अंतिम फॉलबैक के रूप में वर्तमान कार्यशील निर्देशिका का उपयोग करता है।

public static String GetAbsolutePath(String relativePath, String basePath) 
{ 
    if (relativePath == null) 
     return null; 
    if (basePath == null) 
     basePath = Path.GetFullPath("."); // quick way of getting current working directory 
    else 
     basePath = GetAbsolutePath(basePath, null); // to be REALLY sure ;) 
    String path; 
    // specific for windows paths starting on \ - they need the drive added to them. 
    // I constructed this piece like this for possible Mono support. 
    if (!Path.IsPathRooted(relativePath) || "\\".Equals(Path.GetPathRoot(relativePath))) 
    { 
     if (relativePath.StartsWith(Path.DirectorySeparatorChar.ToString())) 
      path = Path.Combine(Path.GetPathRoot(basePath), relativePath.TrimStart(Path.DirectorySeparatorChar)); 
     else 
      path = Path.Combine(basePath, relativePath); 
    } 
    else 
     path = relativePath; 
    // resolves any internal "..\" to get the true full path. 
    return Path.GetFullPath(path); 
} 
+0

ग्रेट समाधान क्योंकि यह बेस पथ के अनुसार पूर्ण या रिश्तेदार पथ को जोड़ता है। मेरी राय में, सापेक्षपैथ तर्क का नाम बदलकर निरपेक्ष ऑरेलिएटिव पाथ रखा जाना चाहिए, क्योंकि यह वास्तव में इसका प्रतिनिधित्व करता है। धन्यवाद –

+0

अच्छा, अगर यह पहले से ही एक पूर्ण पथ है, तो यह सिर्फ एक विशेष मामला है, वास्तव में ... फ़ंक्शन अभी भी सापेक्ष पथों को हल करने के लिए है, lol। मैंने अभी यह नाम दिया है कि यह स्पष्ट करने के लिए कि कौन सा पैरामीटर है;) – Nyerguds

+0

@ जुलीओनोब्रे विशेष रूप से यहां के तर्कों को 'पथ। कॉम्बाइन' की तुलना में उलट दिया जाता है। यह आसानी से तय किया गया है, लेकिन मैं इससे बचता हूं क्योंकि मैं अक्सर काम करने वाली निर्देशिका पर सापेक्ष पथ को हल करने के लिए इसका उपयोग करता हूं, और पहले तर्क के रूप में शून्य को अजीब लग रहा है। – Nyerguds

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