La mejor manera de iterar carpetas y subcarpetas
¿Cuál es la mejor manera de iterar carpetas y subcarpetas para obtener el tamaño del archivo, el número total de archivos y el tamaño total de la carpeta en cada carpeta a partir de una ubicación especificada?
5 answers
Utilice el directorio .GetFiles () . La parte inferior de esa página incluye un ejemplo que es totalmente recursivo, creo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-23 15:57:21
Si está utilizando.NET 4, es posible que desee utilizar los métodos System.IO.DirectoryInfo.EnumerateDirectories
y System.IO.DirectoryInfo.EnumerateFiles
. Si utiliza el método Directory.GetFiles
como otros posts han recomendado, la llamada al método no volverá hasta que haya recuperado TODAS las entradas. Esto podría tomar mucho tiempo si está usando recursión.
Los métodos
EnumerateFiles
yGetFiles
difieren de la siguiente manera:
- Cuando utilice
EnumerateFiles
, puede comenzar a enumerar la colección de objetosFileInfo
antes toda la colección es devolver.- 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 se trabaja con muchos archivos y directorios,
EnumerateFiles
puede ser más eficiente.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-23 15:58:45
Para iterar a través de todos los directorios subcarpetas y archivos, no importa la cantidad de subcarpetas y archivos son.
string [] filenames;
fname = Directory.GetFiles(jak, "*.*", SearchOption.AllDirectories).Select(x => Path.GetFileName(x)).ToArray();
A continuación, desde la matriz se puede obtener lo que desea a través de un bucle o como desee.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-03 13:43:34
Tenga en cuenta que tendrá que realizar comprobaciones 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-03 13:49:26
Para iterar a través de archivos y carpetas normalmente se utilizan los tipos DirectoryInfo y FileInfo. El tipo FileInfo tiene una propiedad Length que devuelve el tamaño del archivo en bytes.
Creo que debe escribir su propio código para iterar a través de los archivos y calcular el tamaño total del archivo, pero debe ser una función recursiva bastante simple.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-03 13:40:38