C++ parcours d'un répertoire & extention

Sneacke -  
 sneacke -
Bonjour,

J'essaye de réaliser un script capable de parcourir de manière récursive le contenu d'un répertoire. CHECK

Je veux également pour voir lister le nombre de fichier trié par type à l'intérieur. C'est la qu'est mon probleme ? pointeur ? tableau ? je suis obligé d'en passer par la ?

Si vous avez une meilleur idée je suis tout ouie !

Exemple :

list C:\

txt 12
avi 1
wmv 3

Merci

2 réponses

  1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    Salut Sneacke,

    Si tu es déjà parvenu à faire ton parcours récursif de répertoires et de fichiers, tu as fait le plus dur (surtout qu'il n'y a pas vraiment de moyen portable de le faire avec le C++ standard).

    Ton problème est donc, pour chaque type de fichier d'un fichier obtenu, de comptabiliser le nombre de fichiers par extension.

    Une façon de faire est d'utiliser map pour créer un tableau associatif.

    http://www.cplusplus.com/reference/map/map/

    Quelque chose, comme cela :

    #include <map>
    #include <string>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        // je ne sais pas comment et où tu récupères tes
        // noms de fichiers. A partir de ce que tu récupères
        // détermine quelle est l'extension du fichier
    
        // on crée un objet "ext" qui mappe un string sur un entier
        map<string, int> ext;
    
        // disons, que le fichier trouvé comporte une extension .txt
        string ext_fich = "txt";
        // on incrémente la valeur de l'entrée ext["txt"]
        ext[ext_fich]++;
        // on simule des incrémentations successives
        ext[ext_fich]++; ext[ext_fich]++; ext[ext_fich]++; ext[ext_fich]++;
        // maintenant, on trouve un .avi
        ext_fich = "avi";
        ext[ext_fich]++;
        // on a aussi des .wmv
        ext_fich = "wmv";
        ext[ext_fich]++; ext[ext_fich]++; ext[ext_fich]++;
    
        // un itérateur permet d'afficher le tableau
        // avec en prime un tri sur les clefs
        map<string, int>::iterator curr,end;
        for( curr = ext.begin(), end = ext.end();  curr != end;  curr++ )
            cout <<  curr->first << " : " << curr->second << endl;
    
        cout << "Il y a " << (int) ext.size() << " extensions différentes." << endl;
    
        // on en a terminé avec notre objet
        ext.~map();
    
        return 0;
    }

    Dal
    0