2009-10-30 10 views
7

¿Hay alguna manera (en Windows que usa Delphi 2010) para obtener la cantidad de archivos en un directorio sin atravesar realmente todos los archivos?¿Cómo puedo recuperar de manera eficiente la cantidad de archivos en un directorio?

Quiero implementar una barra de progreso durante algunas operaciones 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?

Respuesta

8

Creo que la manera más rápida es usar el método TDirectory.GetFiles ubicado en IOutils.pas. Como la cantidad 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 está incluido en el método anterior) no atraviesa los archivos, solo cruza las entradas en una tabla, por lo que puede ser más rápido de lo esperado.

10

Si está ejecutando en Windows 7 o Server 2008 R2, le recomiendo extraer las funciones FindFirst y FindMatchingFile de SysUtils y hackear la primera para utilizar FindFirstFileEx en lugar de FindFirstFile. A continuación, puede establecer el parámetro de indicadores adicionales en 2 (definido en MSDN como FIND_FIRST_EX_LARGE_FETCH) con esta configuración condicionada a (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, ya que la última documentación no se encuentra en la documentación de Microsoft recuperada por la ayuda de Delphi.

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

+2

+1 ¡muy interesante! – jpfollenius

+0

También puede usar el nivel de información FindExInfoBasic, desactiva la recuperación de nombres antiguos de archivos cortos –

Cuestiones relacionadas