c# folder subfolder

c# - La mejor forma de iterar carpetas y subcarpetas



access folder c# (5)

¿Cuál es la mejor manera de iterar carpetas y subcarpetas para obtener el tamaño del archivo, la cantidad total de archivos y el tamaño total de la carpeta en cada carpeta comenzando en una ubicación específica?


Para iterar a través de todos los directorios, subcarpetas y archivos, sin importar cuánta subcarpeta y archivos sean.

string [] filenames; fname = Directory.GetFiles(jak, "*.*", SearchOption.AllDirectories).Select(x => Path.GetFileName(x)).ToArray();

luego, desde la matriz, puede obtener lo que desea a través de un bucle o como desee.


Para recorrer los archivos y carpetas, normalmente usaría los tipos DirectoryInfo y FileInfo . El tipo FileInfo tiene una propiedad de longitud que devuelve el tamaño del archivo en bytes.

Creo que debes escribir tu propio código para recorrer los archivos y calcular el tamaño total del archivo, pero debería ser una función recursiva bastante simple.


Si está utilizando .NET 4, puede usar los métodos System.IO.DirectoryInfo.EnumerateDirectories y System.IO.DirectoryInfo.EnumerateFiles . Si usa el método Directory.GetFiles como recomendaron otras publicaciones, la llamada al método no se devolverá hasta que haya recuperado TODAS las entradas. Esto podría llevar mucho tiempo si está utilizando recursión.

De la documentation :

Los métodos EnumerateFiles y GetFiles difieren de la siguiente manera:

  • Cuando utiliza EnumerateFiles , puede comenzar a enumerar la colección de objetos FileInfo antes de que se devuelva toda la colección.
  • Cuando utiliza GetFiles , debe esperar a que se devuelva toda la matriz de objetos FileInfo antes de poder acceder a la matriz.

Por lo tanto, cuando trabaja con muchos archivos y directorios, EnumerateFiles puede ser más eficiente.


Tenga en cuenta que tendrá que realizar verificaciones de validación.

string[] fileNames = Directory.GetFiles("c://", "*.*", SearchOption.AllDirectories); int fileCount = fileNames.Count(); long fileSize = fileNames.Select(file => new FileInfo(file).Length).Sum(); // in bytes


Utilice Directory.GetFiles() . La parte inferior de esa página incluye un ejemplo que es totalmente recursivo, creo.