सी # में पूर्ण पथ के सापेक्ष पथ?


86

मेरे पास xml फाइलें हैं जिनमें छवियों के लिए href फ़ाइल पथ हैं (उदाहरण के लिए ".... \ images \ image.jpg")। Hrefs में सापेक्ष पथ होते हैं। अब, मुझे चित्रों को hrefs निकालने और उन्हें फ़ाइल सिस्टम में निरपेक्ष पथ में बदलने की आवश्यकता है।

मैं GetFullPath विधि के बारे में जानता हूं, लेकिन मैंने इसकी कोशिश की और यह केवल CurrentDirectory सेट से काम करने लगता है, जो C प्रतीत होता है: इसलिए मैं यह नहीं देखता कि मैं इसका उपयोग कैसे कर सकता हूं। और फिर भी, मेरे पास फ़ाइल का पूर्ण पथ है जिसमें hrefs, और href सापेक्ष पथ हैं, इसलिए चूंकि मेरे लिए निरपेक्ष पथ के आधार पर ".... \" भागों की संख्या वापस गिनना एक सरल कार्य है। युक्त फ़ाइल, ऐसा लगता है कि वहाँ भी इस प्रोग्राम के रूप में अच्छी तरह से करना चाहिए।

मुझे उम्मीद है कि कुछ सरल विधि है जिसके बारे में मुझे नहीं पता है! कोई विचार?


2
क्या यह डेस्कटॉप या वेब एप्लिकेशन है?
क्रिस कूकेन

जवाबों:


104

मान लें कि आप वास्तविक निर्देशिका को जानते हैं कि XML फ़ाइल Path.Combine, उदा

var absolute_path = Path.Combine(directoryXmlLivesIn, "..\images\image.jpg");

यदि आप किसी के साथ पूर्ण पथ वापस प्राप्त करना चाहते हैं .. तो आप उपयोग कर सकते हैं:

Path.GetFullPath((new Uri(absolute_path)).LocalPath);

1
धन्यवाद, मेरी समस्या स्पष्ट रूप से थी कि मैं पहले xml फ़ाइल की निर्देशिका प्राप्त करना भूल गया था, मैंने कॉम्बाइन की कोशिश की थी, लेकिन फ़ाइल के पूर्ण पथ के साथ, जो काम नहीं किया। मुझे नहीं पता कि इन सभी उत्तरों में से कौन सा पहले था, समय एक ही दिखाता है, लेकिन आपने निर्देशिका प्राप्त करने का संकेत दिया, इसलिए मैंने आपका उत्तर चुना। सभी को धन्यवाद!
एंडर्स

10
थोड़े से प्रयोग के साथ ऐसा प्रतीत होता है कि (new Uri(absolute_path)).LocalPathयह एक ही बात करता है जैसे Path.GetFullPath(absolute_path)कि एक या दूसरे को पर्याप्त होना चाहिए।
टिम लुईस

1
ध्यान दें कि उरी में "#" या "और" का विशेष हैंडलिंग है जो आप पथ और फ़ाइल नाम को संभालते समय नहीं चाहते हैं!
MatsW

1
@MatsW: docs.microsoft.com/en-us/dotnet/api/system.uri.localpathGets a local operating-system representation of a file name. इस मामले में कहता है, कोई विशेष हैंडलिंग अपेक्षित नहीं है।
फ्रैंकम

142
string exactPath = Path.GetFullPath(yourRelativePath);

काम करता है


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

2
पहले तो मैंने सोचा कि यह काम नहीं किया, लेकिन यह करता है। यदि आप C: \ test \ A \ .. \ B \ test.txt का अपना सापेक्ष पथ फ़ीड करते हैं, तो आउटपुट C: \ test \ B \ test.txt होगा
BraveNewMath


9

यह सापेक्ष पथ को निरपेक्ष पथ में परिवर्तित करने का सबसे अच्छा तरीका है!

string absolutePath = System.IO.Path.GetFullPath(relativePath);

6

आप "आधार" पथ के साथ Path.Combine का उपयोग कर सकते हैं, फिर परिणाम पर GetFullPath।

string absPathContainingHrefs = GetAbsolutePath(); // Get the "base" path
string fullPath = Path.Combine(absPathContainingHrefs, @"..\..\images\image.jpg");
fullPath = Path.GetFullPath(fullPath);  // Will turn the above into a proper abs path

5

क्या आपने Server.MapPathतरीका आजमाया है यहाँ एक उदाहरण है

string relative_path = "/Content/img/Upload/Reports/59/44A0446_59-1.jpg";
string absolute_path = Server.MapPath(relative_path);
//will be c:\users\.....\Content\img\Upload\Reports\59\44A0446_59-1.jpg

1

इसने मेरे लिए काम किया।

//used in an ASP.NET MVC app
private const string BatchFilePath = "/MyBatchFileDirectory/Mybatchfiles.bat"; 
var batchFile = HttpContext.Current.Server.MapPath(BatchFilePath);

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.