चूंकि मुझे और कुछ नहीं मिला है, इसलिए इसे वास्तव में सामान्यीकृत तरीके से हल करने में मदद करता है, यहां एक और जवाब है।
ध्यान दें कि इसी तरह के प्रश्नों के कुछ उत्तर Uri
प्रकार का उपयोग करने की कोशिश करते हैं , लेकिन यह पीछे चल रहे स्लैश बनाम नो ट्रेलिंग स्लैश के साथ भी संघर्ष करता है।
इस पृष्ठ पर मेरा अन्य उत्तर उन ऑपरेशनों के लिए काम करता है जो फ़ाइल सिस्टम को काम करने के लिए काम करते हैं, लेकिन अगर हम चाहते हैं कि अभी हल किया हुआ रास्ता (जैसे कि तुलनात्मक कारणों से), फ़ाइल सिस्टम के माध्यम से जाने के बिना, C:/Temp/..
औरC:/
अलग माना जाएगा। फ़ाइल सिस्टम के माध्यम से जाने के बिना, उस तरीके से नेविगेट करना हमें एक सामान्यीकृत, ठीक से तुलनीय पथ प्रदान नहीं करता है।
हम क्या कर सकते है?
हम निम्नलिखित खोज पर निर्माण करेंगे:
Path.GetDirectoryName(path + "/") ?? ""
होगा मज़बूती से हमें एक निर्देशिका पथ देना स्लैश के बिना ।
- एक स्लैश (के रूप में जोड़ा जा रहा है
string
, नहीं के रूप में char
) एक व्यवहार करेगा null
पथ के रूप में यह व्यवहार करता है एक ही""
।
GetDirectoryName
जोड़ा हुआ स्लैश के लिए अंतिम पथ घटक को छोड़ने से बचना होगा।
GetDirectoryName
स्लैश और नेविगेशनल डॉट्स को सामान्य करेगा।
- इसमें किसी भी ट्रेलिंग स्लैश को हटाना शामिल है।
- इसमें
..
नौवहन द्वारा ढहना भी शामिल है ।
GetDirectoryName
null
एक खाली रास्ते की ओर लौटेंगे , जिसे हम समेटते हैं ""
।
हम इसका उपयोग कैसे करते हैं?
सबसे पहले, इनपुट पथ को सामान्य करें :
dirPath = Path.GetDirectoryName(dirPath + "/") ?? "";
फिर, हम मूल निर्देशिका प्राप्त कर सकते हैं , और हम आगे भी नेविगेट करने के लिए इस ऑपरेशन को किसी भी समय दोहरा सकते हैं:
path = Path.GetDirectoryName(path);
ध्यान दें कि हमने फ़ाइल सिस्टम को कभी नहीं छुआ है। रास्ते का कोई हिस्सा मौजूद होने की जरूरत नहीं है, जैसा कि अगर हमने इस्तेमाल किया होता DirectoryInfo
।