एक पथ से फ़ोल्डर का नाम प्राप्त करना


186
string path = "C:/folder1/folder2/file.txt";

मैं किन वस्तुओं या विधियों का उपयोग कर सकता हूं जो मुझे इसका परिणाम देंगे folder2?


5
क्या आप अंतिम फ़ोल्डर नाम चाहते हैं, यदि आपके पास C: \ folder1 \ folder2 \ folder3 \ file.txt है, तो आप "फ़ोल्डर" चाहते हैं?
स्टीव डैनर

जवाबों:


334

मैं शायद कुछ इस तरह का उपयोग करेगा:

string path = "C:/folder1/folder2/file.txt";
string lastFolderName = Path.GetFileName( Path.GetDirectoryName( path ) );

आंतरिक कॉल GetDirectoryNameपूर्ण पथ को लौटाएगा, जबकि बाहरी कॉल GetFileName()अंतिम पथ घटक को लौटाएगा - जो फ़ोल्डर का नाम होगा।

यह दृष्टिकोण काम करता है कि क्या वास्तव में पथ मौजूद है या नहीं। यह दृष्टिकोण, हालांकि, शुरू में एक फ़ाइलनाम में समाप्त होने वाले मार्ग पर निर्भर करता है। यदि यह अज्ञात है कि पथ किसी फ़ाइल नाम या फ़ोल्डर के नाम पर समाप्त होता है - तो इसके लिए यह आवश्यक है कि आप वास्तविक पथ की जाँच करें कि क्या कोई फ़ाइल / फ़ोल्डर पहले स्थान पर मौजूद है। उस स्थिति में, दान दिमित्रु का उत्तर अधिक उपयुक्त हो सकता है।


133
एक अन्य समाधान: नई DirectoryInfo (पूर्णपाठ) लौटाएं। नाम;
डेविड इकार्डी

1
डेविड इकार्डी के समाधान ने मेरे लिए बेहतर काम किया क्योंकि मेरे पास रिश्तेदार रास्ते थे। धन्यवाद।
अक्त्रन १६'१४ को

4
@DavideIcardi आपकी टिप्पणी वास्तव में एक उत्तर होनी चाहिए, यह इसके लायक है।
ओन्ड्रेज जनसेक

3
जब पथ फ़ाइल (निर्देशिका में पथ) को शामिल नहीं करता है, तो यह काम नहीं करता है, जबकि @DavideIcardi समाधान करता है।
आगे

6
चेतावनी: यह समाधान गलत है! "सी: / बिन / लॉग" के लिए यह "बिन" देता है। नई निर्देशिकाइन्फो का उपयोग करें (पूर्णपाठ) ।नाम; बजाय।
Zbigniew Wiadro

36

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

string filename = @"C:/folder1/folder2/file.txt";
string FolderName = new DirectoryInfo(System.IO.Path.GetDirectoryName(filename)).Name;

23

सरल और साफ। केवल उपयोग करता है System.IO.FileSystem- एक आकर्षण की तरह काम करता है:

string path = "C:/folder1/folder2/file.txt";
string folder = new DirectoryInfo(path).Name;

3
इस मामले में फ़ोल्डर होगा file.txt, और नहींfolder2
TJ Rockefeller

13

DirectoryInfo निर्देशिका नाम को छीनने का काम करता है

string my_path = @"C:\Windows\System32";
DirectoryInfo dir_info = new DirectoryInfo(my_path);
string directory = dir_info.Name;  // System32

7

जब पथ में कोई फ़ाइल नाम नहीं है, तो मुझे इस कोड स्निपेट का उपयोग उस मार्ग के लिए निर्देशिका प्राप्त करने के लिए करना चाहिए:

उदाहरण के लिए "c: \ tmp \ test \ Visual";

string dir = @"c:\tmp\test\visual";
Console.WriteLine(dir.Replace(Path.GetDirectoryName(dir) + Path.DirectorySeparatorChar, ""));

आउटपुट:

दृश्य


आप केवल Path.GetFileName (dir) कर सकते हैं और यह फ़ोल्डर का नाम ठीक-ठीक वापस कर देगा।
jrich523

3
var fullPath = @"C:\folder1\folder2\file.txt";
var lastDirectory = Path.GetDirectoryName(fullPath).Split('\\').LastOrDefault();

2

यह भी ध्यान रखना महत्वपूर्ण है कि एक लूप में निर्देशिका नामों की सूची प्राप्त करने के दौरान, DirectoryInfoक्लास को एक बार प्रारंभ किया जाता है , इस प्रकार केवल पहली बार कॉल करने की अनुमति मिलती है। इस सीमा को बायपास करने के लिए, आप किसी भी व्यक्तिगत निर्देशिका के नाम को संग्रहीत करने के लिए अपने लूप के भीतर चर का उपयोग सुनिश्चित करें।

उदाहरण के लिए, यह नमूना कोड स्ट्रिंग प्रकार की सूची के अंदर प्रत्येक पाया निर्देशिका-नाम को जोड़ते हुए किसी भी मूल निर्देशिका के भीतर निर्देशिकाओं की सूची के माध्यम से लूप करता है:

[सी#]

string[] parentDirectory = Directory.GetDirectories("/yourpath");
List<string> directories = new List<string>();

foreach (var directory in parentDirectory)
{
    // Notice I've created a DirectoryInfo variable.
    DirectoryInfo dirInfo = new DirectoryInfo(directory);

    // And likewise a name variable for storing the name.
    // If this is not added, only the first directory will
    // be captured in the loop; the rest won't.
    string name = dirInfo.Name;

    // Finally we add the directory name to our defined List.
    directories.Add(name);
}

[VB.NET]

Dim parentDirectory() As String = Directory.GetDirectories("/yourpath")
Dim directories As New List(Of String)()

For Each directory In parentDirectory

    ' Notice I've created a DirectoryInfo variable.
    Dim dirInfo As New DirectoryInfo(directory)

    ' And likewise a name variable for storing the name.
    ' If this is not added, only the first directory will
    ' be captured in the loop; the rest won't.
    Dim name As String = dirInfo.Name

    ' Finally we add the directory name to our defined List.
    directories.Add(name)

Next directory

1

नीचे कोड केवल फ़ोल्डर का नाम पाने में मदद करता है

 सार्वजनिक वेधशाला का चयन आइटम = नई वेधशाला का चयन ();

   प्रयत्न
            {
                string [] folderPaths = Directory.GetDirectories (stemp);
                items.Clear ();
                foreach (फ़ोल्डर में स्ट्रिंग s)
                {
                    आइटम्स। जोड़ें (नया ग्रिडइमेंस {फ़ोल्डरनाम = एस.रेमोव (0, एस.लिस्टइंडेक्सऑफ़ ('\\') + 1), फ़ोल्डरपथ = एस});

                }

            }
            पकड़ना (अपवाद)
            {

            }
  सार्वजनिक वर्ग के ग्रिड
    {
        सार्वजनिक स्ट्रिंग फ़ोल्डरनाम {प्राप्त करें; सेट; }
        सार्वजनिक स्ट्रिंग फ़ोल्डरपथ {प्राप्त करें; सेट; }
    }

0

यह बदसूरत है, लेकिन आवंटन से बचा जाता है:

private static string GetFolderName(string path)
{
    var end = -1;
    for (var i = path.Length; --i >= 0;)
    {
        var ch = path[i];
        if (ch == System.IO.Path.DirectorySeparatorChar ||
            ch == System.IO.Path.AltDirectorySeparatorChar ||
            ch == System.IO.Path.VolumeSeparatorChar)
        {
            if (end > 0)
            {
                return path.Substring(i + 1, end - i - 1);
            }

            end = i;
        }
    }

    if (end > 0)
    {
        return path.Substring(0, end);
    }

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