कैसे एक निर्देशिका में सभी उप निर्देशिकाओं को सूचीबद्ध करने के लिए


84

मैं एक परियोजना पर काम कर रहा हूँ और मुझे एक निर्देशिका में सभी उप निर्देशिकाओं को सूचीबद्ध करने की आवश्यकता है उदाहरण के लिए मैं सभी उप निर्देशिकाओं को c: \

जवाबों:


143

"Your_directory_path"Directory.GetDirectories द्वारा निर्दिष्ट निर्देशिका के उपनिर्देशिका प्राप्त करने के लिए उपयोग करें । परिणाम तार की एक सरणी है।

var directories = Directory.GetDirectories("your_directory_path");

डिफ़ॉल्ट रूप से, यह केवल उपनिर्देशिका को एक स्तर गहरा देता है। सभी पुनरावर्ती लौटने और परिणामों को फ़िल्टर करने के लिए विकल्प हैं, यहां दस्तावेज , और क्लाइव के उत्तर में दिखाया गया है।


अनधिकृत असफलता से बचना

यह आसानी से संभव है कि आपको UnauthorizedAccessExceptionएक निर्देशिका मिल जाए, जिस पर आपकी पहुंच न हो।

आपको अपना स्वयं का तरीका बनाना होगा जो अपवाद को संभालता है, जैसे:

public class CustomSearcher
{ 
    public static List<string> GetDirectories(string path, string searchPattern = "*",
        SearchOption searchOption = SearchOption.AllDirectories)
    {
        if (searchOption == SearchOption.TopDirectoryOnly)
            return Directory.GetDirectories(path, searchPattern).ToList();

        var directories = new List<string>(GetDirectories(path, searchPattern));

        for (var i = 0; i < directories.Count; i++)
            directories.AddRange(GetDirectories(directories[i], searchPattern));

        return directories;
    }

    private static List<string> GetDirectories(string path, string searchPattern)
    {
        try
        {
            return Directory.GetDirectories(path, searchPattern).ToList();
        }
        catch (UnauthorizedAccessException)
        {
            return new List<string>();
        }
    }
}

और फिर इसे इस तरह से कॉल करें:

var directories = CustomSearcher.GetDirectories("your_directory_path");

यह एक निर्देशिका और उसके सभी उपनिर्देशिका को पुन: खोजता है। यदि यह एक उपनिर्देशिका को हिट करता है, तो यह एक्सेस नहीं कर सकता है, कुछ ऐसा है जो इसे फेंक देगा UnauthorizedAccessException, यह अपवाद को पकड़ता है और बस उस दुर्गम निर्देशिका के लिए एक खाली सूची देता है। फिर यह अगले उपनिर्देशिका पर जारी है।



7
FolderBrowserDialog fbd = new FolderBrowserDialog();

        DialogResult result = fbd.ShowDialog();

        string[] files = Directory.GetFiles(fbd.SelectedPath);
        string[] dirs = Directory.GetDirectories(fbd.SelectedPath);

        foreach (string item2 in dirs)
        {
            FileInfo f = new FileInfo(item2);

            listBox1.Items.Add(f.Name);

        }

        foreach (string item in files)
        {
            FileInfo f = new FileInfo(item);

            listBox1.Items.Add(f.Name);

        }

यदि आप एक सूची बॉक्स में लिस्टिंग नहीं करना चाहते हैं और उपयोगकर्ता को कौन सा फ़ोल्डर चुनने के लिए अनुदान देते हैं, हां, यह उत्तर काम करता है।
मर्ट गुल्सोइ डे

5
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TRIAL
{
    public class Class1
    {
        static void Main(string[] args)
        {
           string[] fileArray = Directory.GetDirectories("YOUR PATH");
           for (int i = 0; i < fileArray.Length; i++)
           {

               Console.WriteLine(fileArray[i]);
           }
            Console.ReadLine();
        }
    }
}

0

पूर्ण पथ के बिना फ़ोल्डर्स की सरल सूची प्राप्त करने के लिए, आप इसका उपयोग कर सकते हैं:

Directory.GetDirectories(parentDirectory).Select(d => Path.GetRelativePath(parentDirectory, d)

अंत में एक अतिरिक्त क्लोजिंग ब्रैकेट की आवश्यकता होती है (इसे संपादित किया होगा, लेकिन इसे स्वीकार किए जाने के लिए कम से कम छह वर्णों को बदलने की आवश्यकता है)। यह भी ध्यान दें कि आपको .NET मानक 2.1 की आवश्यकता है। Path.GetRelativePath का उपयोग करने के लिए इंस्टॉल किया गया है
StuKay

-1

सभी डायरेक्ट्री और उप निर्देशिकाओं को दिखाएं

डीआईआर डिर ():

from glob import glob

dir = []

dir = glob("path")

def all_sub_dir(dir):
{

     for item in dir:

            {
                b = "{}\*".format(item)
                dir += glob(b)
            }
         print(dir)
}

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