2010-02-10 11 views
6

¿Cómo obtener la lista de carpetas en esta carpeta?¿Cómo obtener la lista de carpetas en esta carpeta?

+0

Utilizo regularmente el siguiente enlace para hacer referencia a la aplicación win 32 ya que actualmente estoy aprendiendo C++ http://msdn.microsoft.com/en-us/library/aa383749(VS.85).aspx pero lógicamente busque los directorios de palabras en el nombre de las funciones, pero no puedo ver nada. ¡Buena pregunta! :-) –

+0

Lo siguiente parece mostrar algunas maneras de lograr lo que quiere hacer http://www.gamedev.net/community/forums/topic.asp?topic_id=177400&whichpage=1􆩞 –

+2

Más tontos que usted agitar un palo, incluyendo http://stackoverflow.com/questions/306533/how-do-i-get-a-list-of-files-in-a-directory-in-c/306917 –

Respuesta

8

Si no puede utilizar .NET & El código administrado, puede ir a través de

Here is an example la API de Win32 que se pueden modificar para conseguir solamente carpetas.

(Básicamente la siguiente comprobación :)

... 
    TCHAR szDir = _T("c:\\"); // or wherever. 
    HANDLE hFind = FindFirstFile(szDir, &ffd); 
... 
    do { 
     if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 
     { 
     // your code on 'ffd' 
     } 
    } while (FindNextFile(hFind, &ffd) != 0); 
10

FindFirstFileEx + FindExSearchLimitToDirectories.

WIN32_FIND_DATA fi; 
HANDLE h = FindFirstFileEx(
     dir, 
     FindExInfoStandard, 
     &fi, 
     FindExSearchLimitToDirectories, 
     NULL, 
     0); 
if (h != INVALID_HANDLE_VALUE) { 
    do { 
     if (fi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 
      printf("%s\n", fi.cFileName); 
    } while (FindNextFile(h, &fi)); 
    FindClose(h); 
} 
+2

FindExSearchLimitToDirectories no es realmente una solución confiable. Es solo una bandera de aviso. Por ejemplo, en mi sistema Windows XP Pro SP3 con NTFS no tiene ningún efecto. Ver: http://stackoverflow.com/questions/2248911/file-system-support-for-findfirstfileex-limit-to-directories – Ash

+0

Espero que alguien siga los enlaces y lea la documentación (que dice "Si el archivo el sistema no admite el filtrado de directorios, este indicador se ignora silenciosamente. ") antes de usar este código. Expectativa irracional? – ephemient

+1

'Esperaría que alguien siga los enlaces y lea la documentación antes de usar este código. Expectativa irracional? Sí, sí lo es. Si querían leer documentos y cosas así, ¿por qué molestarse en preguntar aquí? El objetivo de preguntar directamente es ir directamente a la respuesta en lugar de pasar todo el día buscando y leyendo. – Synetech

1

Para una mejor portabilidad, utilizar la biblioteca boost filesystem. Use opendir()/readdir() y amigos para sistemas basados ​​en UNIX.

+0

'opendir()' etc. funcionan bien para mí en Windows usando MinGW. –

Cuestiones relacionadas