jak wyświetlić listę wszystkich podkatalogów w katalogu

84

Pracuję nad projektem i muszę wymienić wszystkie podkatalogi w katalogu, na przykład jak mogę wyświetlić wszystkie podkatalogi w c: \

Matthewj
źródło

Odpowiedzi:

144

Służy Directory.GetDirectoriesdo pobierania podkatalogów katalogu określonego przez „twoja_ścieżka_katalogu” . Wynikiem jest tablica ciągów.

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

Domyślnie zwraca to tylko podkatalogi o jeden poziom głębokości. Istnieją opcje zwracania wszystkich rekurencyjnie i filtrowania wyników, udokumentowanych tutaj i pokazanych w odpowiedzi Clive'a.


Unikanie wyjątku UnauthorizedAccessException

Jest bardzo możliwe, że otrzymasz, UnauthorizedAccessExceptionjeśli trafisz do katalogu, do którego nie masz dostępu.

Być może będziesz musiał utworzyć własną metodę, która obsługuje wyjątek, na przykład:

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>();
        }
    }
}

A potem nazwij to tak:

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

Powoduje to rekurencyjne przeszukiwanie katalogu i wszystkich jego podkatalogów. Jeśli trafi do podkatalogu, do którego nie może uzyskać dostępu, coś, co spowodowałoby wyrzucenie UnauthorizedAccessException, przechwytuje wyjątek i po prostu zwraca pustą listę dla tego niedostępnego katalogu. Następnie przechodzi do następnego podkatalogu.

Grant Winney
źródło
61

Tak proste:

string[] folders = System.IO.Directory.GetDirectories(@"C:\My Sample Path\","*", System.IO.SearchOption.AllDirectories);
Clive
źródło
Super rozwiązanie!
Majedur Rahaman
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);

        }
Hakan SUMNULU
źródło
jeśli chcesz wyświetlić listę w polu listy i zezwolić użytkownikowi na wybranie folderu, tak, ta odpowiedź działa.
Mert Gülsoy
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();
        }
    }
}
Mayur Narula
źródło
0

Aby uzyskać prostą listę folderów bez pełnej ścieżki, możesz użyć:

Directory.GetDirectories(parentDirectory).Select(d => Path.GetRelativePath(parentDirectory, d)
BuddyZ
źródło
Potrzebuje dodatkowego nawiasu zamykającego na końcu (Edytowałby go, ale musiałby zmienić \ dodać co najmniej sześć znaków, aby został zaakceptowany). Pamiętaj również, że aby korzystać z Path.GetRelativePath, musisz zainstalować .NET Standard 2.1
StuKay
-1

pokaż wszystkie katalogi i podkatalogi

def dir ():

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)
}
mostafa-hajian
źródło
3
To jest Pyhon, a nie C #, prawda?
Tobonaut