Pregunta

¿Hay alguna manera (en Windows usando Delphi 2010) para obtener la cantidad de archivos en un directorio sin atravesar todos los archivos?

Quiero implementar una barra de progreso durante alguna operación de indexación del sistema de archivos. Por esa razón, necesito saber cuántos archivos hay en el directorio.

¿Cuál es la forma más rápida de obtener la cantidad de archivos en un directorio?

¿Fue útil?

Solución

Creo que la forma más rápida es usar el método TDirectory.GetFiles ubicado en IOutils.pas. Como el número de archivos (visibles) en un directorio puede ser diferente para cada usuario, existe una pequeña posibilidad de que solo haya un número para recuperar de alguna manera.

El enfoque FindFirst / FindNext (que se incluye en el método anterior) en realidad no atraviesa archivos, solo atraviesa entradas en una tabla, por lo que puede ser más rápido de lo esperado.

Otros consejos

Si está ejecutando Windows 7 o Server 2008 R2, le recomiendo extraer las funciones FindFirst y FindMatchingFile de SysUtils y piratear las primeras para usar FindFirstFileEx en lugar de FindFirstFile. Luego puede establecer el parámetro de banderas adicionales en 2 (definido en MSDN como FIND_FIRST_EX_LARGE_FETCH ) con esta configuración condicionada en (Win32majorversion = 6) y (Win32minorversion > = 1), por el momento.

Esta configuración produce un aumento de velocidad muy significativo para los bucles FindFirst / FindNext en estos SO. Busque FindFirstFileEx en MSDN para obtener más detalles, como la última documentación no está en la documentación de Microsoft recuperada por la ayuda de Delphi.

TDirectory.GetFiles finalmente parece llamar a FindFirst, por lo que no le dará muchas ventajas más que simplificar su propio código.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top