2010-11-01 11 views
16

क्या दो पूर्ण पथ इनपुट दिए गए सापेक्ष पथ को प्राप्त करने के लिए सी # में कोई विधि मौजूद है?क्या दो पूर्ण पथ इनपुट दिए गए सापेक्ष पथ को प्राप्त करने के लिए सी # में कोई विधि मौजूद है?

है यही कारण है कि मैं दो आदानों (आधार के रूप में पहले फ़ोल्डर के साथ) जैसे

c:\temp1\adam\ 

और

c:\temp1\jamie\ 

होता तो उत्पादन होगा

..\jamie\ 
+0

मैं मिथबस्टर्स संदर्भ के लिए खुद को +1 में नहीं ला सकता हूं। ओह फिर जाओ! – RichK

उत्तर

10
नहीं

सुनिश्चित करें कि कोई बेहतर तरीका है, लेकिन यह काम करेगा:

var file1 = @"c:\temp1\adam\"; 
var file2 = @"c:\temp1\jamie\"; 

var result = new Uri(file1) 
    .MakeRelativeUri(new Uri(file2)) 
    .ToString() 
    .Replace("/", "\\"); 
2

यह आसान है। कदम:

  1. स्ट्रिंग के आम शुरुआत निकालें (c:\temp1\)
  2. (आपके मामले में 1) पहली पथ की निर्देशिका की गणना संख्या
  3. उन लोगों के साथ बदलें ..
  4. दूसरा रास्ता जोड़े
+2

लेकिन आप सामान्य उपसर्ग नहीं जानते! (चरण 1) –

+1

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

+0

@ मिच गेहूं मैंने सोचा कि यह स्पष्ट है – Andrey

2

अपडेटेडः चूंकि कन्स्ट्रक्टर अब अप्रचलित है, आप इसका उपयोग कर सकते हैं:

Uri.UnescapeDataString(new Uri(file1).MakeRelativeUri(new Uri(file2)).ToString()) 
    .Replace("/", "\\"); 

पुराने संस्करण:

किर्क Woll के विचार अच्छा है, लेकिन आप अपने पथ सुनिश्चित करने के लिए घायल नहीं मिलता है की जरूरत है (उदाहरण के लिए रिक्त स्थान% 20 द्वारा प्रतिस्थापित किया गया) उरी को आपके पथ से बचने के लिए नहीं कहकर:

var result = new Uri(file1, true) 
    .MakeRelativeUri(new Uri(file2, true)) 
    .ToString() 
    .Replace("/", "\\"); 
+0

हम्म, मैंने सोचा कि यह एक अच्छा मुद्दा था, लेकिन यह उल्लेख करता है कि निर्माता को अप्रचलित माना जाता है और एक कंपाइलर चेतावनी उत्पन्न करेगा। मेरे परीक्षण में, मुझे बच निकले पात्रों के साथ कोई समस्या नहीं थी। मुझे आश्चर्य है कि आपके लिए कौन से पात्र बच रहे थे? –

+0

@ किर्क वोल, मुझे नाम में रिक्त स्थान के साथ समस्याएं थीं। – laktak

+0

आह, दुह, क्षमा करें, आपको एहसास नहीं हुआ कि आपने इसका उल्लेख किया था। उत्तर देने के लिये धन्यवाद। –

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