पूर्ण फ़ाइल पथ से फ़ोल्डर का नाम प्राप्त करें


116

मुझे एप्लिकेशन के पूर्ण पथ से फ़ोल्डर का नाम कैसे मिलेगा?

यह नीचे फ़ाइल पथ है,

c:\projects\root\wsdlproj\devlop\beta2\text

यहां "टेक्स्ट" फ़ोल्डर का नाम है।

मैं इस पथ से उस फ़ोल्डर का नाम कैसे प्राप्त कर सकता हूं?

जवाबों:


205

DirectoryInfo.Name देखें :

string dirName = new DirectoryInfo(@"c:\projects\roott\wsdlproj\devlop\beta2\text").Name;

क्या इसकी आवश्यकता नहीं है कि फ़ोल्डर वास्तव में फ़ाइल सिस्टम में मौजूद है (यदि फ़ोल्डर का नाम अभी भी "पूर्ण" पथ के लिए "पाठ" होगा यदि फ़ोल्डर "c: \ Projects \ root \ wsdlproj \ devlop \ beta2 \" पाठ नहीं करता है) वर्तमान में) फ़ाइल सिस्टम में मौजूद है?
पीटर मोर्टेंसन

@PeterMortensen, नहीं। मैंने अभी इसका परीक्षण किया है और यह विधि स्ट्रिंग से निम्नतम स्तर के फ़ोल्डर का नाम लौटाती है, भले ही फ़ोल्डर पथ मौजूद न हो।
vbguyny

1
धन्यवाद, शानदार जवाब। लेकिन मैं थोड़ा हैरान हूं कि System.IO.Directory इस तरह के ऑपरेशन का समर्थन नहीं करता है।
anhoppe

1
@ शान्तोपे - मैं सहमत हूँ। एक अन्य विकल्प जो मैंने देखा वह है Path.GetDirectoryName msdn.microsoft.com/en-us/library/… - लेकिन कल तक इसका परीक्षण नहीं कर पाएंगे।
डॉन चेडल

30

मुझे लगता है कि आप फ़ाइल पथ से मूल फ़ोल्डर नाम प्राप्त करना चाहते हैं। इसे प्राप्त करना आसान है। एक तरीका एक FileInfoप्रकार की वस्तु बनाना और अपनी Directoryसंपत्ति का उपयोग करना है।

उदाहरण:

FileInfo fInfo = new FileInfo("c:\projects\roott\wsdlproj\devlop\beta2\text\abc.txt");

String dirName = fInfo.Directory.Name;

16

इसे इस्तेमाल करे

var myFolderName = @"c:\projects\roott\wsdlproj\devlop\beta2\text";
var result = Path.GetFileName(myFolderName);

यदि आपके पास स्ट्रिंग में एक फ़ाइल नाम है, तो यह फ़ाइल नाम भी लौटाता है
बजे

1
इस स्थिति में, पाठ एक्सटेंशन (एक्सटेंशन-कम) फ़ाइल नाम है। मुझे लगा कि ओपी के बाद क्या था। यदि यह एक फ़ोल्डर या फ़ाइल नाम वास्तव में कोई फर्क नहीं पड़ता। यदि स्ट्रिंग में फ़ाइल नाम नहीं है, तो यह कोड उसे दे देगा कि वह क्या है।
11yvind Bråthen

4
जब तक कि रास्ते इस तरह से समाप्त नहीं हो जाते:@"c:\projects\roott\wsdlproj\devlop\beta2\text\"
क्रिस्टोफ क्ले

1
यह एक फ़ोल्डर के लिए काम नहीं करता है। मुझे एक खाली तार मिलता है। एक फाइल मौजूद होनी चाहिए
BraveNewMath

3
यह ठीक काम करता है यदि फ़ोल्डर पथ में पीछे चलने वाला बैकस्लैश नहीं होता है (उदाहरण के लिए, Path.GetDirectoryName () से लौटाए गए फ़ोल्डर पथ )। उस फ़ंक्शन का नाम, GetFileName (), थोड़ा भ्रामक है, हालांकि।
पीटर मोर्टेंसन

9

आप इसका उपयोग कर सकते हैं:

string path = @"c:\projects\roott\wsdlproj\devlop\beta2\text";
string lastDirectory = path.Split(new char[] { System.IO.Path.DirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries).Last();

क्या होगा अगर रास्ता इस तरह दिखता है: @ "c: \ Projects \ roott \ wsdlproj \ devlop \ beta2 \ text \", इसलिए एक अतिरिक्त निर्देशिका के साथ
SeparatorChar

1
@ एलेक्स - मैंने अपने कोड को संशोधित करने के लिए इसे उन प्रकार के रास्तों के साथ भी काम किया है। StringSplitOptions.RemoveEmptyEntriesउसने चाल चली।
क्रिस्टोफ ने

Msdn.microsoft.com/en-us/library/… के अनुसार , यदि आवश्यक अनुमति नहीं दी गई है, तो FileInfo अपवाद फेंक सकता है।
डैनियल बी

5

बस उपयोग करें Path.GetFileName

यहाँ - फ़ोल्डर के पूर्ण पथ से फ़ोल्डर का नाम निकालें:

string folderName = Path.GetFileName(@"c:\projects\root\wsdlproj\devlop\beta2\text");//Return "text"

यहाँ कुछ अतिरिक्त है - फ़ाइल के पूर्ण पथ से फ़ोल्डर का नाम निकालें:

string folderName = Path.GetFileName(Path.GetDirectoryName(@"c:\projects\root\wsdlproj\devlop\beta2\text\GTA.exe"));//Return "text"

3

मुझे लगा कि फ़ाइल सिस्टम में जाने के अलावा कोई रास्ता नहीं है, यह जानने के लिए कि text.txt एक निर्देशिका है या सिर्फ एक फ़ाइल है। यदि आप कुछ सरल चाहते थे, तो शायद आप उपयोग कर सकते हैं:

s.Substring(s.LastIndexOf(@"\"));

1
स्ट्रिंग के सामने एक स्लैश से बचने के लिए: s.Substring (s.LastIndexOf (@ "\") + 1);
डेविड येट्स

2

इस स्थिति में वह फ़ाइल जिसे आप प्राप्त करना चाहते हैं, स्ट्रैपट वैरिएबल में संग्रहीत है:

string strPath = Server.MapPath(Request.ApplicationPath) + "/contents/member/" + strFileName;

2

यहाँ एक वैकल्पिक तरीका है जो DirectoryInfo ऑब्जेक्ट बनाने के बिना मेरे लिए काम करता है। मुख्य बिंदु यह है कि GetFileName()जब पथ में कोई अनुगामी स्लैश नहीं है तो काम करता है।

var name = Path.GetFileName(path.TrimEnd(Path.DirectorySeparatorChar));

उदाहरण:

var list = Directory.EnumerateDirectories(path, "*")
        .Select(p => new
        {
            id = "id_" + p.GetHashCode().ToString("x"),
            text = Path.GetFileName(p.TrimEnd(Path.DirectorySeparatorChar)),
            icon = "fa fa-folder",
            children = true
        })
        .Distinct()
        .OrderBy(p => p.text);

1

ऐसा भी किया जा सकता है;

var directoryName = System.IO.Path.GetFileName(@"c:\projects\roott\wsdlproj\devlop\beta2\text");

यह एक खाली स्ट्रिंग
डिस्कोलर

@disklosr - सिर्फ ScriptCs के साथ परीक्षण किया गया है और यह 'पाठ'
स्टीव कूपर

2
यह ठीक काम करता है यदि फ़ोल्डर पथ में पीछे चलने वाला बैकस्लैश नहीं होता है (उदाहरण के लिए, Path.GetDirectoryName () से लौटाए गए फ़ोल्डर पथ )। उस फ़ंक्शन का नाम, GetFileName (), थोड़ा भ्रामक है, हालांकि।
पीटर मोर्टेंसन

0

पिछले उत्तरों (लेकिन निश्चित) के आधार पर

using static System.IO.Path;

var dir = GetFileName(path?.TrimEnd(DirectorySeparatorChar, AltDirectorySeparatorChar));

.NET स्रोतGetFileName से स्पष्टीकरण :

दिए गए पथ के नाम और विस्तार भागों को लौटाता है। परिणामी स्ट्रिंग में पथ के वर्ण शामिल हैं जो अंतिम बैकस्लैश ("\"), स्लैश ("/"), या कॉलन (":") पथ में वर्ण का अनुसरण करते हैं। परिणामी स्ट्रिंग संपूर्ण पथ है यदि पथ में पीछे की ओर स्लैश, स्लैश या बृहदान्त्र वर्णों को हटाने के बाद कोई बैकस्लैश नहीं है। परिणामी स्ट्रिंग अशक्त है यदि पथ अशक्त है।


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