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

 C++ Discussion :

récursivité : exploration de sous-répertoires


Sujet :

C++

  1. #1
    Membre régulier
    Homme Profil pro
    Etudiant CNAM (DIE20)
    Inscrit en
    Janvier 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant CNAM (DIE20)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 151
    Points : 97
    Points
    97
    Par défaut récursivité : exploration de sous-répertoires
    Bonsoir,

    J'ai un petit code qui fonctionne qui m'affiche les sommes MD5 de fichiers d'un répertoire.
    J'ai tenté de le modifier pour faire de la récursivité dans les sous-répertoires, mais je provoque une erreur de segmentation.

    Pourriez-vous m'indiquer ce qui coince ? (en utilisant le deboggeur, j'ai l'impression que ma variable "dir" reste "vide"/"inaccessible", mais je ne comprend pas bien cet outil)

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    #include <QApplication>
    #include <QTextCodec>
     
    #include <QWidget>
    #include <QVBoxLayout>
    #include <QLabel>
    #include <QStandardItemModel>
    #include <QTableView>
     
    #include <QCryptographicHash>
    #include <QByteArray>
    #include <QFile>
    #include <QDir>
    #include <QString>
    #include <QList>
     
     
    // Dossier à scanner
    #define DOSSIER "/home/user/test"
     
    // Profondeur de la récursivité
    #define DEEP 2
     
     
    QString hash(QFile *fichier)
    {
        // lecture du ficher dans un QByteArray
        QByteArray data = fichier->readAll();
        // calcul de la somme MD5
        QByteArray dataHash = QCryptographicHash::hash(data, QCryptographicHash::Md5);
        // conversion en QString et retour de la valeur
        return dataHash.toHex();
    }
     
    void traiterFichiers(QDir dossier, QStandardItemModel *model)
    {
        // Création de la liste des sous-dossiers
        QDir dir(dossier);
        dir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot | QDir::Hidden | QDir::NoSymLinks);
        dir.setSorting(QDir::Name | QDir::Reversed);
        QFileInfoList listeDossiers = dir.entryInfoList();
     
        // boucle récursive d'exploration des sous-dossiers
        for (int i = 0; i < std::min(DEEP,listeDossiers.size()); ++i)
        {
            QDir dossier(listeDossiers.at(i).absoluteDir());
            traiterFichiers(dossier, model);
        }
     
        // génération de la liste des fichiers
        dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
        dir.setSorting(QDir::Size | QDir::Reversed);
        QFileInfoList listeFichiers = dir.entryInfoList();
     
        // Génération du hash des fichiers
        QList<QStandardItem*> enTeteTableau;
        enTeteTableau.append(new QStandardItem("Hashing MD5"));
        enTeteTableau.append(new QStandardItem("Nom de fichier"));
        enTeteTableau.append(new QStandardItem("Taille"));
        model->appendRow(enTeteTableau);
        for (int i = 0; i < listeFichiers.size(); ++i)
        {
            QFileInfo fileInfo = listeFichiers.at(i);
            // ouverture du fichier en lecture seule
            QFile fichier(fileInfo.absoluteFilePath());
            if (fichier.open(QIODevice::ReadOnly))
            {
                QList<QStandardItem*> infoHash;
                infoHash.append(new QStandardItem(hash(&fichier)));
                infoHash.append(new QStandardItem(fileInfo.fileName()));
                infoHash.append(new QStandardItem(QString::number(fileInfo.size())+" octets"));
                model->appendRow(infoHash);
            }
            else
            {
                QList<QStandardItem*> infoHash;
                infoHash.append(new QStandardItem("Ouverture impossible"));
                infoHash.append(new QStandardItem(fileInfo.fileName()));
                model->appendRow(infoHash);
            }
        }
    }
     
    int main(int argc, char *argv[])
    {
    //    Calcul de sommes MD5 des fichiers d'un dossier
    //    Sources :
    //    - http://qt.developpez.com/faq/?page=fr-es#lire_fichier_texte
    //    - http://www.lesite.com/tutoriel-3-295903-hacher-avec-qt.html
     
        QApplication app(argc, argv);
     
        // Codage en UTF-8
        QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
     
        // Affichage : création fenetre, layout, et QLabel
        QWidget fenetre;
        QVBoxLayout layout;
        QStandardItemModel *model = new QStandardItemModel(0,3);
     
        // Scan à partir de DOSSIER
        QDir dossier(QString(DOSSIER));
        traiterFichiers(dossier,model);
     
        // affichage du résultat
        layout.addWidget(new QLabel(QString(DOSSIER)));
        QTableView *vueTableau = new QTableView;
        vueTableau->setModel(model);
        layout.addWidget(vueTableau);
        fenetre.setLayout(&layout);
        fenetre.show();
     
        return app.exec();
    }
    Merci d'avance pour votre aide
    NB : le code fonctionne très bien avec

  2. #2
    Membre éprouvé Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Points : 997
    Points
    997
    Par défaut
    Bonsoir.

    À première vue, je dirais que le problème vient d'ici :
    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
    #line 35
    void traiterFichiers(QDir dossier, QStandardItemModel *model)
    {
        // Création de la liste des sous-dossiers
        QDir dir(dossier);
        (...)
    
    #line 43
        // boucle récursive d'exploration des sous-dossiers
        for (int i = 0; i < std::min(DEEP,listeDossiers.size()); ++i)
        {
            QDir dossier(listeDossiers.at(i).absoluteDir());
            traiterFichiers(dossier, model);
        }
        (...)
    }
    Normalement, si je ne me trompe pas, ce code ne devrait pas poser de problème puisque tes deux variables n'ont pas tout à fait la même portée (l'une est incluse dans l'autre) ; d'ailleurs, le compilateur ne t'indique pas d'erreur.
    Mais je pointe ça puisque lorsque DEEP vaut 0, et donc quand on ne rentre jamais dans cette boucle, ça fonctionne.
    Essaie déjà en utilisant un autre nom, ou en ne redéclarant pas le type de la variable.

    Ceci dit, je ne vois pas bien l'intérêt de copier la valeur de dossier dans une nouvelle variable dir.
    Étant donné que tu passes ce paramètre par valeur, il n'y a pas de risque de modifier le contenu du paramètre appelé depuis le main.
    De plus, tu n'utilises plus cette variable dans la fonction après.
    Alors pourquoi ne pas utiliser directement dossier au lieu de dir ?

    À part ça, je n'ai pas tester ce code.
    Donc je ne peux rien dire sur ce que tu interprètes de ce que te dis le débogueur...

  3. #3
    Membre régulier
    Homme Profil pro
    Etudiant CNAM (DIE20)
    Inscrit en
    Janvier 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant CNAM (DIE20)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 151
    Points : 97
    Points
    97
    Par défaut
    en fait, au départ, je passais par référence, et comme ça plantait, j'ai tenté par valeur.
    j'essaie ta proposition et je reviens

  4. #4
    Membre régulier
    Homme Profil pro
    Etudiant CNAM (DIE20)
    Inscrit en
    Janvier 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant CNAM (DIE20)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 151
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par Steph_ng8 Voir le message
    Bonsoir.
    Alors pourquoi ne pas utiliser directement dossier au lieu de dir ?
    Héritage idiot de mon ancien code quand cette partie était dans le main...

    Citation Envoyé par Steph_ng8 Voir le message
    Essaie déjà en utilisant un autre nom, ou en ne redéclarant pas le type de la variable.
    J'ai essayé en ne redéclarant pas inutilement la même variable, et ça plante toujours...
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    #include <QApplication>
    #include <QTextCodec>
     
    #include <QWidget>
    #include <QVBoxLayout>
    #include <QLabel>
    #include <QStandardItemModel>
    #include <QTableView>
     
    #include <QCryptographicHash>
    #include <QByteArray>
    #include <QFile>
    #include <QDir>
    #include <QString>
    #include <QList>
     
     
    // Dossier à scanner
    #define DOSSIER "/home/user/test"
     
    // Profondeur de la récursivité
    #define DEEP 2
     
     
    QString hash(QFile *fichier)
    {
        // lecture du ficher dans un QByteArray
        QByteArray data = fichier->readAll();
        // calcul de la somme MD5
        QByteArray dataHash = QCryptographicHash::hash(data, QCryptographicHash::Md5);
        // conversion en QString et retour de la valeur
        return dataHash.toHex();
    }
     
    void traiterFichiers(QDir dossier, QStandardItemModel *model)
    {
        // Création de la liste des sous-dossiers
        dossier.setFilter(QDir::Dirs | QDir::NoDotAndDotDot | QDir::Hidden | QDir::NoSymLinks);
        dossier.setSorting(QDir::Name | QDir::Reversed);
        QFileInfoList listeDossiers = dossier.entryInfoList();
     
        // boucle récursive d'exploration des sous-dossiers
        for (int i = 0; i < std::min(DEEP,listeDossiers.size()); ++i)
        {
            QDir dossier(listeDossiers.at(i).absoluteDir());
            traiterFichiers(dossier, model);
        }
     
        // génération de la liste des fichiers
        dossier.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
        dossier.setSorting(QDir::Size | QDir::Reversed);
        QFileInfoList listeFichiers = dossier.entryInfoList();
     
        // Génération du hash des fichiers
        QList<QStandardItem*> enTeteTableau;
        enTeteTableau.append(new QStandardItem("Hashing MD5"));
        enTeteTableau.append(new QStandardItem("Nom de fichier"));
        enTeteTableau.append(new QStandardItem("Taille"));
        model->appendRow(enTeteTableau);
        for (int i = 0; i < listeFichiers.size(); ++i)
        {
            QFileInfo fileInfo = listeFichiers.at(i);
            // ouverture du fichier en lecture seule
            QFile fichier(fileInfo.absoluteFilePath());
            if (fichier.open(QIODevice::ReadOnly))
            {
                QList<QStandardItem*> infoHash;
                infoHash.append(new QStandardItem(hash(&fichier)));
                infoHash.append(new QStandardItem(fileInfo.fileName()));
                infoHash.append(new QStandardItem(QString::number(fileInfo.size())+" octets"));
                model->appendRow(infoHash);
            }
            else
            {
                QList<QStandardItem*> infoHash;
                infoHash.append(new QStandardItem("Ouverture impossible"));
                infoHash.append(new QStandardItem(fileInfo.fileName()));
                model->appendRow(infoHash);
            }
        }
    }
     
    int main(int argc, char *argv[])
    {
    //    Calcul de sommes MD5 des fichiers d'un dossier
    //    Sources :
    //    - http://qt.developpez.com/faq/?page=fr-es#lire_fichier_texte
    //    - http://www.lesite.com/tutoriel-3-295903-hacher-avec-qt.html
     
        QApplication app(argc, argv);
     
        // Codage en UTF-8
        QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
     
        // Affichage : création fenetre, layout, et QLabel
        QWidget fenetre;
        QVBoxLayout layout;
        QStandardItemModel *model = new QStandardItemModel(0,3);
     
        // Scan à partir de DOSSIER
        QDir dossier(QString(DOSSIER));
        traiterFichiers(dossier,model);
     
        // affichage du résultat
        layout.addWidget(new QLabel(QString(DOSSIER)));
        QTableView *vueTableau = new QTableView;
        vueTableau->setModel(model);
        layout.addWidget(vueTableau);
        fenetre.setLayout(&layout);
        fenetre.show();
     
        return app.exec();
    }

  5. #5
    Membre éprouvé Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Points : 997
    Points
    997
    Par défaut
    Ok.
    Je vais essayer de compiler ça.

  6. #6
    Membre éprouvé Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Points : 997
    Points
    997
    Par défaut
    Désolé, je crois que j'avais lu trop vite ton code.
    Le problème vient de la boucle elle-même.
    Pour être précis de la condition d'arrêt.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (int i = 0; i < std::min(DEEP,listeDossiers.size()); ++i)
    Tu ne lui dis pas d'aller au plus loin au niveau DEEP de profondeur dans la l'arborescence.
    Pour chaque dossier, tu lui demandes d'aller voir au plus DEEP sous-dossiers.

    Et j'ai même l'impression qu'il tente d'aller voir les sous-dossiers même s'il n'y en a pas...
    Du coup, il empile les appels à traiterFichiers, jusqu'à ce qu'il n'y ait plus de mémoire disponible...
    D'où l'erreur de segmentation.

    En regardant d'un peu plus près ton code, j'ai l'impression qu'il y a une erreur, et qu'il ne fait pas ce que tu penses qu'il fait.
    Cette erreur est plutôt liée à Qt, enfin à ta compréhension des méthodes des classes.

    Je te donne un indice, ce n'est pas la liste des sous-dossiers que tu parcours dans ta boucle.
    Et en réalité, tu passes toujours le même dossier à ta fonction.
    Enfin c'est ce que j'ai compris après uns lecture sommaire de la doc...

    Bon courage !

  7. #7
    Membre régulier
    Homme Profil pro
    Etudiant CNAM (DIE20)
    Inscrit en
    Janvier 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant CNAM (DIE20)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 151
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par Steph_ng8 Voir le message
    Désolé, je crois que j'avais lu trop vite ton code.
    Le problème vient de la boucle elle-même.
    Pour être précis de la condition d'arrêt.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (int i = 0; i < std::min(DEEP,listeDossiers.size()); ++i)
    Tu ne lui dis pas d'aller au plus loin au niveau DEEP de profondeur dans la l'arborescence.
    Pour chaque dossier, tu lui demandes d'aller voir au plus DEEP sous-dossiers.
    C'est vraiment bête les erreurs bêtes
    Bon, ça c'est résolu en 5 minutes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void traiterFichiers(QDir dossier, QStandardItemModel *model, int deep=0)
    {
        // Création de la liste des sous-dossiers
        dossier.setFilter(QDir::Dirs | QDir::NoDotAndDotDot | QDir::Hidden | QDir::NoSymLinks);
        dossier.setSorting(QDir::Name | QDir::Reversed);
        QFileInfoList listeDossiers = dossier.entryInfoList();
     
        // boucle récursive d'exploration des sous-dossiers
        for (int i = 0; i < listeDossiers.size() && deep<DEEP_MAX; ++i)
        {
            QDir dossier(listeDossiers.at(i).absoluteDir());
            traiterFichiers(dossier, model, deep+1);
        }
    Citation Envoyé par Steph_ng8 Voir le message
    En regardant d'un peu plus près ton code, j'ai l'impression qu'il y a une erreur, et qu'il ne fait pas ce que tu penses qu'il fait.
    Cette erreur est plutôt liée à Qt, enfin à ta compréhension des méthodes des classes.

    Je te donne un indice, ce n'est pas la liste des sous-dossiers que tu parcours dans ta boucle.
    Et en réalité, tu passes toujours le même dossier à ta fonction.
    Enfin c'est ce que j'ai compris après uns lecture sommaire de la doc...

    Bon courage !
    Effectivement, maintenant que je n'ai plus d'erreur de segmentation, je constate qu'il me scan toujours le dossier racine quelque soit le niveau de récursivité...
    Faut que je creuse ça... Merci pour la piste. Je pense que ça vient de ma redéfinition de QDir dossier dans la boucle for, c'est pas du tout logique mon truc. Qt n'aura pas le dernier mot, j'en fais le serment ! Non mais....

  8. #8
    Membre régulier
    Homme Profil pro
    Etudiant CNAM (DIE20)
    Inscrit en
    Janvier 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant CNAM (DIE20)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 151
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par spirzouf Voir le message
    Qt n'aura pas le dernier mot, j'en fais le serment ! Non mais....
    Je tiens toujours parole : Spirzouf 2 - Qt 0 (après prolongations faut dire... )

    Merci pour l'aide, j'ai galéré dans les méandres de la doc avant de comprendre que j'avais utilisé des absoluteDir() au lieu des absoluteFilePath()

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    #include <QApplication>
    #include <QTextCodec>
     
    #include <QWidget>
    #include <QVBoxLayout>
    #include <QLabel>
    #include <QStandardItemModel>
    #include <QTableView>
     
    #include <QCryptographicHash>
    #include <QByteArray>
    #include <QFile>
    #include <QDir>
    #include <QString>
    #include <QList>
     
     
    // Dossier à scanner
    #define DOSSIER "/home"
     
    // Profondeur de la récursivité
    #define DEEP_MAX 1
     
     
    QString hash(QFile *fichier)
    {
        // lecture du ficher dans un QByteArray
        QByteArray data = fichier->readAll();
        // calcul de la somme MD5
        QByteArray dataHash = QCryptographicHash::hash(data, QCryptographicHash::Md5);
        // conversion en QString et retour de la valeur
        return dataHash.toHex();
    }
     
    void traiterFichiers(QDir dossier, QStandardItemModel *model, int deep=0)
    {
        // Création de la liste des sous-dossiers
        dossier.setFilter(QDir::Dirs | QDir::NoDotAndDotDot | QDir::Hidden | QDir::NoSymLinks);
        dossier.setSorting(QDir::Name);
        QFileInfoList listeSousDossiers = dossier.entryInfoList();
     
        // boucle récursive d'exploration des sous-dossiers
        for (int i = 0; i < listeSousDossiers.size() && deep<DEEP_MAX; ++i)
        {
            QFileInfo fileInfoSousDossier = listeSousDossiers.at(i);
            traiterFichiers(fileInfoSousDossier.absoluteFilePath(), model, deep+1);
        }
     
        // génération de la liste des fichiers
        dossier.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
        dossier.setSorting(QDir::Size | QDir::Reversed);
        QFileInfoList listeFichiers = dossier.entryInfoList();
     
        // Génération du hash des fichiers
        for (int i = 0; i < listeFichiers.size(); ++i)
        {
            QFileInfo fileInfo = listeFichiers.at(i);
            // ouverture du fichier en lecture seule
            QFile fichier(fileInfo.absoluteFilePath());
            if (fichier.open(QIODevice::ReadOnly))
            {
                QList<QStandardItem*> infoHash;
                infoHash.append(new QStandardItem(hash(&fichier)));
                infoHash.append(new QStandardItem(fileInfo.filePath()));
                infoHash.append(new QStandardItem(QString::number(fileInfo.size())+" octets"));
                model->appendRow(infoHash);
            }
            else
            {
                QList<QStandardItem*> infoHash;
                infoHash.append(new QStandardItem("Ouverture impossible"));
                infoHash.append(new QStandardItem(fileInfo.filePath()));
                model->appendRow(infoHash);
            }
        }
    }
     
    int main(int argc, char *argv[])
    {
    //    Calcul de sommes MD5 des fichiers d'un dossier
    //    Sources :
    //    - http://qt.developpez.com/faq/?page=fr-es#lire_fichier_texte
    //    - http://www.lesite.com/tutoriel-3-295903-hacher-avec-qt.html
     
        QApplication app(argc, argv);
     
        // Codage en UTF-8
        QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
     
        // Affichage : création fenetre, layout, et QLabel
        QWidget fenetre;
        QVBoxLayout layout;
        QStandardItemModel *model = new QStandardItemModel(0,3);
        QList<QStandardItem*> enTeteTableau;
        enTeteTableau.append(new QStandardItem("Hashing MD5"));
        enTeteTableau.append(new QStandardItem("Fichier"));
        enTeteTableau.append(new QStandardItem("Taille"));
        model->appendRow(enTeteTableau);
     
        // Scan à partir de DOSSIER
        QDir dossierRacine(QString(DOSSIER));
        traiterFichiers(dossierRacine,model);
     
        // affichage du résultat
        layout.addWidget(new QLabel(QString(DOSSIER)));
        QTableView *vueTableau = new QTableView;
        vueTableau->setModel(model);
        layout.addWidget(vueTableau);
        fenetre.setLayout(&layout);
        fenetre.show();
     
        return app.exec();
    }

  9. #9
    Membre éprouvé Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Points : 997
    Points
    997
    Par défaut

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/05/2007, 23h20
  2. [MS-DOS] Supprimer tout les sous répertoires contenu dans un
    Par Furius dans le forum Scripts/Batch
    Réponses: 7
    Dernier message: 30/11/2005, 12h24
  3. Lister les fichiers de plusieurs sous-répertoire ?
    Par ratbiker dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 25/11/2005, 21h20
  4. script qui explore les sous-répertoire ?
    Par farenheit dans le forum Flash
    Réponses: 9
    Dernier message: 20/07/2005, 12h02
  5. fichier .bat : problèmes avec des sous-répertoires
    Par aymron dans le forum Windows
    Réponses: 4
    Dernier message: 23/06/2005, 09h33

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