2011-09-04 10 views

Odpowiedz

70

Korzystając Directory.GetDirectories aby uzyskać podkatalogi katalogu określone przez "twoja_nazwa_directory". Wynikiem jest tablica łańcuchów.

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

Domyślnie zwraca tylko podkatalogi o jeden poziom głęboki. Istnieją opcje zwracania wszystkich rekursywnie i filtrowania wyników, documented here i wyświetlane w odpowiedzi Clive'a.


uniknięcia UnauthorizedAccessException

To łatwo zdarzyć, że dostaniesz UnauthorizedAccessException jeśli trafisz katalog, do którego nie mają dostępu.

Możesz stworzyć swoją 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.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>(); 
     } 
    } 
} 

a następnie wywołać ją tak:

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

czy to nie wyrzuciłoby wyjątku UnauthorizedAccessException i * nie * dostałoby pozostałych folderów? –

+0

@ J.Doe Przechodzi przez rekursywnie katalog i wszystkie jego podkatalogi. Jeśli trafi do podkatalogu, do którego nie może uzyskać dostępu, coś, co spowodowałoby 'UnauthorizedAccessException', przechwytuje wyjątek i po prostu zwraca pustą listę dla tego niedostępnego katalogu. Następnie przechodzi do następnego podkatalogu. –

38

łatwe, jak to:

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

jeśli chcesz, aby lista zawierała się w polu listy, a użytkownik może wybrać folder, tak, ta odpowiedź działa. –

Powiązane problemy