2011-09-04 45 views

Respuesta

70

Uso Directory.GetDirectories para obtener los subdirectorios del directorio especificado por "your_directory_path". El resultado es una matriz de cadenas.

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

De forma predeterminada, eso solo devuelve subdirectorios de un nivel de profundidad. Hay opciones para devolver todo recursivamente y para filtrar los resultados, documented here, y se muestran en la respuesta de Clive.


evitar un UnauthorizedAccessException

Es muy posible que obtendrá un UnauthorizedAccessException Si llega a un directorio en el que no tiene acceso.

Puede que tenga que crear su propio método que controla la excepción, así:

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

Y luego llamarlo así:

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

¿aún no lanzaría una Access Access no autorizada y * no * obtendría el resto de las carpetas? –

+0

@ J.Doe Atraviesa un directorio y todos sus subdirectorios recursivamente. Si llega a un subdirectorio al que no puede acceder, algo que hubiera arrojado una 'UnauthorizedAccessException', capta la excepción y simplemente devuelve una lista vacía para ese directorio inaccesible. Luego continúa al siguiente subdirectorio. –

38

de fácil:

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

si desea hacer una lista en un cuadro de lista y otorgarle al usuario que seleccione qué carpeta, sí, esta respuesta funciona. –

Cuestiones relacionadas