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

[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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
sneacke
 
Merci !
0