IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Lister des fichiers avec QFileSystemInfo


Sujet :

Qt

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 36
    Points : 19
    Points
    19
    Par défaut Lister des fichiers avec QFileSystemInfo
    Bonjour,

    J'aimerai réussir à avoir le nom des dossiers et sous dossiers d'un dossier données ( / par exemple) a partir d'un objet QFileSystemInfo.
    A priori cette classe scan les disques et classes les fichiers sous forme d'arbre (c'est ce qui m’intéresse).
    Seul problème, je pense mon temps sur la doc et impossible de comprendre comment faire pour avoir la liste des fichiers enfants d'un répertoire (par exemple).

    Donc si quelqu'un a un bout de code pour m'explique je le remercie d'avance !

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    Bonjour,

    http://qt.developpez.com/faq/?page=f...ter-repertoire répond à ta question ? (pas facile à comprendre, tu devrais te relire )

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    Je suis déjà aller voir ces classes la et si je n'arrive pas à ce que je veux, j'irai probablement voir de ce coté la.

    Je vais reformuler mon problème.
    J'ai besoin d'obtenir l'arborescence de mon systèmes dans une classe tout en gardant le fait que les dossiers soit agencés sous formes d'arbre.
    Si j'ai bien compris (me corriger si je me trompe), la classe QFileSystemModel scan le système et génère l'arborescence du système. Donc a priori c'est exactement ce dont j'ai besoin.
    Sauf que je n'arrive absolument pas à extirper les données dot j'ai besoin de cette classe.
    Par exemple j'aimerai avoir la liste des fichiers contenu dans le dossier /home.

    J'espère avoir été plus clair

  4. #4
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    Pour la clarté, je parlais surtout de fautes

    QFileSystemModel est un modèle, il s'utilise en principe avec une vue (voir le modèle/vue de Qt). L'exemple de la doc de cette classe est très clair pour ça car en 5 lignes de code on voit comment ça marche.
    Pour simplement extraire des données, tu peux le faire en bouclant sur les enfants de ton root index (voir la classe QModelIndex). Mais une classe modèle est vraiment spécifique au modèle/vue, il y a plus simple pour juste récupérer des données précises, par exemple QDir.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QStringList listeFichiers = QDir ( "/home" ).entryList ( QDir::Files );
    (pour les dossiers courants et multiplateformes, tu as même des méthodes statiques, par exemple QDir::home() ).

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    Comme je l'ai déjà dit, j’essaie d'utiliser ce modèle parce qu'il correspond a priori exactement à ce dont j'ai besoin : l'ensemble de mon système sous forme d'arbre. D'autant plus qu'il doit être optimisé au niveau des scans des disques dur. Enfaite j’essaie de faire ma propre vue pour ce modèle.

    Pour simplement extraire des données, tu peux le faire en bouclant sur les enfants de ton root index (voir la classe QModelIndex)
    C'est exactement ce que je n'arrive pas à faire
    Je n'arrive pas à me servir de la classe QModelIndex, enfin j'arrive a rien de concret.

    Donc si quelqu'un aurait un exemple de code pour juste afficher le nom des fichiers enfants d'un dossier donné avec l'aide de QFileSystemModel se serait parfait.

    Merci d'avance.

  6. #6
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    Ah, donc tu essayes vraiment d'utiliser le Modèle/Vue pour afficher cette arborescence, il fallait le dire ! Tu avais l'air de dire que c'était juste pour interroger le modèle (pour moi un arbre c'est pas forcément visuel d'où la mauvaise compréhension).

    Ceci devrait fonctionner (codé ici donc pas testé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    QFileSystemModel *model = new QFileSystemModel;
    model->setRootPath( QDir::rootPath() );
     
    QModelIndex home = model->index ( "/home" );
    QModelIndexList homeFiles;
     
    if ( model->isDir ( home ) ) {
        int l_childCount = model->rowCount ( home );
     
        for ( int i = 0; i < childCount; i++ ) {
            QModelIndex child = home.child ( i, 0 );
     
            if ( !model->isDir ( child ) )
                homeFiles.append ( child );
        }
    }

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    J'ai essayer le code et ça n'as pas marché.
    Le programme ne rentre pas dans la boucle.
    En faite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     model->rowCount ( home );
    renvoi 0.
    Du coup je me suis dit que l'objet model n'avait pas scanné ce qu'il y avait dans "/home", et j'ai essayé la fonction fetchMore, mais cela n'a rien changé.

  8. #8
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    Mais "/home", ça existe au moins ? Ce n'est pas "/etc/home" ?

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    "/home" existe chez moi. Je suis sous la dernière version d'ubuntu.
    Cela dit, si je met "/" ça ne marche pas non plus...

  10. #10
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    Donc lister les fichiers de façon plus classique avec QDir donne de bons résultats ? Je ne connais ni Ubuntu ni QFileSystemModel, donc je te laisse continuer à chercher et nous dire ce que tu auras trouvé (sauf si quelqu'un peut aider bien sûr).

  11. #11
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    QDir dir = QDir::root();
    QStringList list = dir.entryList();
    foreach (QString str, list)
        _fonction_ajout_model(str);
    Pour l'ajout au modèle, on prendrait dir.absolutePath() + "/" + str et on ajouterait cela dedans.

    Cela convient-il ?

    Bonne continuation,
    Amnell.
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  12. #12
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    Donc selon Amnell, la fonction _fonction_ajout_model est censé ajouter les chemins dans le model ?
    Je suis pas sur de bien comprendre comment faire ça ?
    et je suis pas sur que ça soit bien ce que j'avais envisagé au début ?

    Enfaite j'aimerai savoir comment QtreeView utilise QFileSystemModel pour récuperer toute les infos du système.

Discussions similaires

  1. Réponses: 6
    Dernier message: 12/06/2015, 00h44
  2. Lister/supprimer des fichiers avec une extension précise
    Par guiguiomr dans le forum VBScript
    Réponses: 10
    Dernier message: 20/05/2008, 10h34
  3. [Conception] Lister des fichiers avec une URL
    Par dontDeleteMe dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 20/03/2007, 08h16
  4. Transférer des fichiers avec un câble réseau
    Par denis finch dans le forum Développement
    Réponses: 5
    Dernier message: 08/11/2005, 16h08
  5. [ZIP]besoin de lire des fichiers avec l'extension tar.gz
    Par mathieublanc13 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 24/05/2004, 13h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo