디렉토리의 모든 하위 디렉토리를 나열하는 방법


84

저는 프로젝트를 진행 중이며 디렉토리의 모든 하위 디렉토리를 나열해야합니다. 예를 들어 c : \의 모든 하위 디렉토리를 나열하려면 어떻게해야합니까?

답변:


143

"your_directory_path"로Directory.GetDirectories 지정된 디렉토리의 하위 디렉토리를 가져 오는 데 사용 합니다 . 결과는 문자열 배열입니다.

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

기본적으로 한 수준 깊이의 하위 디렉터리 만 반환합니다. 모든 것을 재귀 적으로 반환하고 결과를 필터링하는 옵션이 있으며 여기문서화 되고 Clive의 답변에 표시됩니다.


UnauthorizedAccessException 방지

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. 그런 다음 다음 하위 디렉토리로 계속됩니다.


61

이처럼 쉽습니다.

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

슈퍼 솔루션!
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);

        }

목록 상자에 나열하지 않고 사용자에게 폴더를 선택하도록 허용하려면 예,이 답변이 작동합니다.
Mert Gülsoy 2015

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)

끝에 추가 닫는 대괄호가 필요합니다 (편집했을 수 있지만 허용하려면 최소 6자를 변경 / 추가해야합니다). 또한 Path.GetRelativePath를 사용하려면 .NET Standard 2.1이 설치되어 있어야합니다
StuKay

-1

모든 디렉토리 및 하위 디렉토리 표시

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
이것은 C #이 아닌 Pyhon입니다.
Tobonaut
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.