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.