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
yGetFiles
difieren de la siguiente manera:
- Cuando utiliza
EnumerateFiles
, puede comenzar a enumerar la colección de objetosFileInfo
antes de que se devuelva toda la colección.- Cuando utiliza
GetFiles
, debe esperar a que se devuelva toda la matriz de objetosFileInfo
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.