2011-09-04 12 views

답변

70

사용 Directory.GetDirectories"your_directory_path"으로 지정된 디렉토리의 서브 디렉토리를 가져옵니다. 결과는 문자열 배열입니다.

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

기본적으로 하위 수준의 하위 수준 만 반환합니다. 모든 재귀 적으로 반환하고 결과를 필터링하는 옵션, documented here이 있으며 Clive의 답변에 표시됩니다. UnauthorizedAccessException

방지


그것은 당신이 당신이 액세스 할 수없는 디렉토리를 치면 당신은 UnauthorizedAccessException를 얻을 수 있습니다 것을 쉽게 가능합니다.

당신은이 같은 예외 처리하는 자신 만의 방법을 만들어야 할 수도 있습니다 : 다음

public class CustomSearcher 
{ 
    public static List<string> GetDirectories(string path, string searchPattern = "*", 
     SearchOption searchOption = SearchOption.TopDirectoryOnly) 
    { 
     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"); 
+0

은 여전히 ​​UnauthorizedAccessException을 던지고 * 나머지 * 폴더를 가져 오지 않을까요? –

+0

@ J.Doe 디렉토리와 모든 하위 디렉토리를 반복적으로 탐색합니다. 'UnauthorizedAccessException'을 던져 버릴 수있는 서브 디렉토리에 접근하면, 예외를 잡아 내고 접근 할 수없는 디렉토리에 대한 빈리스트를 반환한다. 그런 다음 다음 하위 디렉토리로 이동합니다. –

38

쉬운이 같이

string[] folders = System.IO.Directory.GetDirectories(@"C:\My Sample Path\","*", System.IO.SearchOption.AllDirectories); 
1
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(); 
     } 
    } 
} 
6
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); 

     } 
+0

목록 상자에 목록을 표시하고 사용자에게 어떤 폴더를 선택하도록 허용 할 경우 (예,이 대답이 작동 함). –

관련 문제