Doy por hecho que usas C++.
Función que lista directorios en Windows:
- void listarDirectorio(std::string Cosa) 
- { 
-     // Variables del sistema 
-   
-     WIN32_FIND_DATA findFileData; 
-     HANDLE          hFind; 
-   
-    // Variable auxiliar 
-   
-     std::string Buffer; 
-   
-     // Iniciamos la busqueda y le pasamos un valor a nuestro Handle 
-   
-     hFind = FindFirstFile(Cosa.c_str(), &findFileData); 
-   
-     // Si no existe la carpeta 
-   
-     if (hFind == INVALID_HANDLE_VALUE) 
-     { 
-         std::cout << "La carpeta no existe o no se puede acceder"; 
-     } 
-   
-     else 
-     { 
-         // Si existe, pasamos al siguiente fichero (el primero solo contiene basura) 
-   
-         FindNextFile(hFind, &findFileData); 
-   
-         // Listamos todos los ficheros restantes 
-   
-         while (FindNextFile(hFind, &findFileData) != 0) 
-         { 
-             Buffer = Cosa; // Creamos una variable de nombre con el valor del directorio 
-             Buffer.erase(Buffer.size()-1); // Borramos el asterisco 
-             Buffer += findFileData.cFileName; 
-   
-             if (GetFileAttributes(Buffer.c_str()) == FILE_ATTRIBUTE_DIRECTORY) 
-             { 
-                 Buffer += "\\*"; 
-                 listarDirectorio(Buffer); 
-             } 
-             else 
-             { 
-                 std::cout<<Buffer<<endl; 
-             } 
-         } 
-     } 
- } 
Es importante que le pases a la función la ruta "*" para que te marque la carpeta actual.