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: \

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.


61

Tak proste:

string[] folders = System.IO.Directory.GetDirectories(@"C:\My Sample Path\","*", System.IO.SearchOption.AllDirectories);

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

        }

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

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)

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

3
To jest Pyhon, a nie C #, prawda?
Tobonaut
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.