2010-06-29 12 views
7
string basepath = @"C:\somefolder\subfolder\bin"; // is defined in runtime 
string relative = @"..\..\templates"; 

string absolute = Magic(basepath, relative); // should be "C:\somefolder\templates" 

क्या आप Magic विधि के साथ मेरी मदद कर सकते हैं? उम्मीद है कि बहुत जटिल कोड नहीं है।आधार पथ और रिश्तेदार से पूर्ण फ़ाइल पथ कैसे प्राप्त करें ".."?

क्या .NET Framework में "Magic" विधि है?

उत्तर

11

आप Path वर्ग को देखें, तो देखते हैं तरीकों की एक जोड़ी है जो मदद करनी चाहिए:

Path.Combine 

और

Path.GetFullPath 

तो:

string newPath = Path.Combine(basepath, relative); 
string absolute = Path.GetFullPath(newPath); 

हालांकि दूसरे चरण के लिए प्रतिसाद नहीं कड़ाई से जरूरी नहीं है - अगर आप कह रहे थे तो यह आपको "क्लीनर" पथ देगा।

+0

अच्छा! 'पथ। गेटफुलपैथ (पथ। कॉम्बाइन (बेसपाथ, रिश्तेदार))' मुझे जो चाहिए वह देता है। –

0

क्योंकि Path.Combine यहाँ सभी मामलों में काम नहीं करता है एक अधिक जटिल समारोह :-)

static string GetFullPath(string maybeRelativePath, string baseDirectory) { 
    if (baseDirectory == null) baseDirectory = Environment.CurrentDirectory; 
    var root = Path.GetPathRoot(maybeRelativePath); 
    if (string.IsNullOrEmpty(root)) 
     return Path.GetFullPath(Path.Combine(baseDirectory, maybeRelativePath)); 
    if (root == "\\") 
     return Path.GetFullPath(Path.Combine(Path.GetPathRoot(baseDirectory), maybeRelativePath.Remove(0, 1))); 
    return maybeRelativePath; 
} 

Path.Combine(@"C:\foo\",@"\foo\bar") रिटर्न @"\foo\bar" है और नहीं के रूप में की उम्मीद @"C:\foo\bar"

+1

"... \ foo \ bar लौटाता है और अपेक्षित नहीं है c: \ foo \ bar" - मुझे नहीं पता कि आप इसकी अपेक्षा क्यों करते हैं, क्योंकि दस्तावेज़ स्पष्ट रूप से बताता है कि "यदि पथ 2 में एक पूर्ण पथ है, तो यह विधि पथ 2 लौटाती है । " – Joe

+0

\ foo \ bar विंडोज़ पर पूर्ण नहीं है, ड्राइव अक्षर को पूर्ण होने के लिए गायब है - सी: \ foo \ bar यह है ^^ – kux

+0

"अपेक्षित" के साथ मेरा मतलब "जादू विधि द्वारा अपेक्षित" ^^ – kux

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