Por favor, consulte Edición de asesoramiento adoptadas hasta el momento ...Liste de manera eficiente todos los subdirectorios en un directorio
que estoy tratando de enumerar todos los directorios (carpetas) en un directorio determinado, utilizando WinAPI & C++.
Ahora mismo mi algoritmo es lenta & ineficaz:
- Uso FindFirstFileEx() para abrir la carpeta Estoy buscando
- Me continuación, busque en todos los archivos en el directorio (utilizando FindNextFile()); si es un archivo de directorio, entonces almaceno su ruta absoluta en un vector, si es solo un archivo, no hago nada.
Esto parece extremadamente ineficiente porque estoy mirando cada archivo en el directorio.
- ¿Hay una función API de Windows que puedo usar que me diga todos los subdirectorios en un directorio dado?
- ¿Conoces un algoritmo que podría utilizar para ubicar de manera eficiente las carpetas de identificación de & en un directorio (carpeta)?
EDIT: Así que después de tomar el consejo He buscado utilizando FindExSearchLimitToDirectories pero para mí todavía imprime todos los archivos (.txt, etc.) & no sólo las carpetas. ¿Estoy haciendo algo mal?
WIN32_FIND_DATA dirData;
HANDLE dir = FindFirstFileEx("c:/users/soribo/desktop\\*", FindExInfoStandard, &dirData,
FindExSearchLimitToDirectories, NULL, 0);
while (FindNextFile(dir, &dirData) != 0)
{
printf("FileName: %s\n", dirData.cFileName);
}
FindExSearchLimitToDirectories es bastante complejo, puede valer la pena mencionar algunas de las complejidades en su respuesta. Además, no soy 100%, resultará en una enumeración significativamente más rápida. ¿El filtrado se realiza en el nivel del sistema de archivos? –
Según MSDN, "Si el sistema de archivos admite el filtrado de directorios, la función busca un directorio con el nombre especificado", así que supongo que está filtrado en el nivel del sistema de archivos. No estoy seguro del impacto en el rendimiento: no puedo perfilarlo ya que no tengo una máquina con Windows en casa. –
Gracias por la respuesta, consulte mi edición donde no funciona con su método – user593747