wxDev.fr, le portail francophone consacré à wxWidgets ! ( The french portal for wxWidgets )  
Esp. membre
Recheche rapide



Recherche avancée
Statistiques
Membres inscrits :2359

Membres en ligne : 0
Invités en ligne : 2
Pub hébergeur
Pourquoi cette pub ?

Valid XHTML 1.0 Transitional

Valid CSS2

Menu Snippets (navigation):
Pages: 1    Accueil » Snippets » Fichiers - Dossiers - Disques
» Lister le contenu d'un dossier : méthode N°2
Détails du snippet : Lister le contenu d'un dossier : méthode N°2
Informations sur l'auteur de ce snippet :


Hors ligne
TestUser5 (Nouveau membre)
Inscrit le : 08-09-2007
Messages: 0
Snippets: 1
Tutoriels: 0
Introduction / Description :
Bonjour à tous.
Voici la deuxième technique pour énumérer le contenu d'un dossier : la méthode wxDir::Traverse(...)
Pour l'utiliser, il faut d'abord créer une classe dérivée de wxDirTraverser, et redéfinir ses méthodes OnDir et OnFile.
Pour chaque entrée trouvée lors de l'énumération, et en fonction de son type (fichier ou dossier), les méthodes OnDir et OnFile sont appelées, avec en paramètre, le nom du fichier ou du dossier concerné : à l'utilisateur d'en faire ce qu'il veut.

Lors de l'appel de ces méthodes, il est possible d'interrompre l'énumération. En effet, il faut retourner une valeur, qui peut être :
- wxDIR_CONTINUE : La méthode wxDir::Traverse() peut continuer son travail.
- wxDIR_STOP : Il faut arrêter l'énumération tout de suite.
- wxDIR_IGNORE : Si l'on est dans un sous-répertoire du dossier initial, on arrête l'énumération de son contenu, et on passe au fichier/dossier suivant du répertoire parent.

Avantages de cette méthode :
- L'utilisateur fait ce qu'il veut avec chaque entrée trouvée : la stocker, l'effacer, ...
- Il est possible de stopper à tout moment l'énumération.
- On est informé des erreurs lors de la lecture d'un dossier, par une troisième méthode qu'il suffit de redéfinir : OnOpenError().
Inconvénients :
- L'énumération est un peu plus longue que pour la méthode wxDir::GetAllFiles(), car il y a appel au wxDirTraverser pour chaque fichier/dossier trouvé.
- On est obligé de créer un objet de type wxDir pour pouvoir appeler sa méthode membre wxDir::Traverse(), car elle n'est pas statique comme wxDir::GetAllFiles().
Contenu du snippet :
Exemple : lister tous les fichiers (et uniquement les fichiers) du répertoire "C:\Temp" et de ses sous-dossiers, et ajouter les entrées obtenues à une wxListBox au fur et à mesure de leur énumération.

Code wxWidgets:

// La classe dérivée de wxDirTraverser
#include <wx/dir.h>
// Le pointeur vers la wxListBox est passé en paramètre au constructeur
// du wxDirTraverser
class MyDirTraverser : public wxDirTraverser
{
public:
    MyDirTraverser(wxListBox *lstResult) { m_lstRes=lstResult;}
    virtual wxDirTraverseResult OnFile(const wxString& filename)
    {
        // On a trouvé un fichier, on l'ajoute à la wxListBox, mais il faut d'abord
        // Vérifier que le pointeur que l'on possède ne soit pas NULL
        if (m_lstRes!=NULL)
            m_lstRes->Append(filename);
        return wxDIR_CONTINUE;
    }
    virtual wxDirTraverseResult OnDir(const wxString& WXUNUSED(dirname))
    {
        // Vous remarquerez la présence de la macro WXUNUSED ci-dessus, pour
        // indiquer que l'on n'a pas l'intention de se servir de la variable
        // dirname, et qu'il est inutile de nous la mettre à disposition.
        return wxDIR_CONTINUE;
    }
private:
    // La variable privée qui va recevoir le pointeur vers la wxListBox
    // Pour l'affichage des résultats.
    wxListBox *m_lstRes;
};
 
// et maintenant, notre fonction qui va lancer la recherche :
void ListerDossierTemp()
{
    // On crée d'abord l'objet wxDir
    wxDir dir(_T("C:\\Temp"));
    // On vérifie que le dossier est OK (qu'il existe bien, par exemple)
    // Sinon, on sort
    if (dir.IsOpened()==false) return;
    // On crée l'objet MyDirTraverser (on part du principe que l'on
    // possède déjà la pointeur vers la wxListBox pour les résultats)
    MyDirTraverser dirtraverser(listbox_fichiers);
    // Maintenant, on peut lancer l'énumération
    dir.Traverse(dirtraverser,_T("*.*"),wxDIR_FILES|wxDIR_DIRS);
    // La wxListBox contient maintenant la liste des fichiers.
}
 
 
 
Explications finales :
Voilà, c'est tout.
Si vous avez besoin d'autres exemples, n'hésitez pas à en faire la demande, je les ajouterais à ce snippet.
En attendant,
@+ et bonne prog.

Xav'
Commentaires

Il n'y a pas encore de commentaire pour ce snippet.
Menu Snippets (navigation):
Pages: 1    Accueil » Snippets » Fichiers - Dossiers - Disques
» Lister le contenu d'un dossier : méthode N°2