... addirittura mesi ... , prima di tentare di risolvere il problema bisognerebbe fare 2 conti con quello che si ha a disposizione e poi considerare se ci vuole qualche extra o se è possibile partire con lo studio del problema.
Né C né C++, in una qualsiasi delle versioni correntemente commercializzate supportano operazioni su filesystems, le librerie standard dei due linguaggi non ti permettono di fare alcunché con i/il filesystem, permettono solo qualcosa di realmente basico e minimale come l'apertura di un file, ma per il resto nulla.
Quindi, punto 1: ti serve una libreria per accedere al filesystem.
in C++ ce ne sono tantissime, dipende dalla tua piattaforma e dalla versione di C++ che vuoi usare, una delle più note è
http://www.boost.org/doc/libs/1_56_0.../doc/index.htm .
Dovresti facilmente risolvere con una discesa ricorsiva lungo l'albero delle directories, in pratica parti dalla radice, controlli se ci sono directory e/o files, se esistono directory listi i files dentro quella directory e così via fintanto che non esaurisci e visiti tutte le directory a tutti i livelli sotto la tua radice .
Al limite se non usi C++11 ti serve anche una libreria per le regex per controllare con quali estensioni stai avendo a che fare o semplicemente controllare un certo pattern dato il nome del file.
1 libreria per il filesystem, uno scan ricorsivo a partire dalla radice che vuoi, operazioni con delle regex, questo è quanto, non c'è bisogno di altro.