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 :

Parcourir dossier " dirent.h"


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 29
    Par défaut Parcourir dossier " dirent.h"
    Bonjour,

    Ce que j'ai actuellement: une fonction qui cherche dans un répertoire des fichiers et me renvoie si le fichier que je cherche se trouve bien dans le répertoire.

    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
           DIR *dir;
    struct dirent *ent;
    if ((dir = opendir ("C:\\Users\\to122333\\Desktop\\tableau\\")) != NULL) {
      /* print all the files and directories within directory */
      while ((ent = readdir (dir)) != NULL) {
     
     
    string nomFichier = ent->d_name;
            if(!(nomFichier == ".")&& !(nomFichier == "..")){
                if(CheckSubstring(nomFichier, tableauRechercher ) ){              // tableauRechercher c'est un string (un caractère) que je recherche dans nomFichier
                    cout << "tableau  trouvee " << nomFichier<< endl;
                    break;
                }
     
     
            }
     
      }
      closedir (dir);
    } else {
      /* could not open directory */
      perror ("");
     
    }
    Ce que je veux faire : Au lieu d'écrire cette fonction à chaque fois dans le main ( je l'utilise 4 fois) j'aimerais juste faire appelle à elle + quand le fichier est trouvé dans le répertoire, l'ouvrir.

    Je vous remercie d'avance pour votre aide.

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    bah, fait une fonction et appelle-la. C'est pas ca?

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 29
    Par défaut
    Si c'est ca, mais ca ne veut pas ou plutôt j y arrive pas ( créer la fonction dir) :/ :'(

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Qu'entends-tu par "ca veut pas"?
    Ca ne compile pas?
    Montre nous le code de ton essai (au moins la fonction et celle l'appelant), et la version avant la fonction.

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 29
    Par défaut
    C'est juste l'écriture de la fonction hors main qui marche pas. Le reste est bon.
    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
     
    DIR* opendir(const char* chemin,string nomTableau)
    {
        DIR *dir
        struct dirent *ent;
    if ((dir = opendir ("C:\\Users\\to122333\\Desktop\\tableau\\")) != NULL) {
      /* print all the files and directories within directory */
      while ((ent = readdir (dir)) != NULL) {
     
     
    string nomFichier = ent->d_name;
            if(!(nomFichier == ".")&& !(nomFichier == "..")){
                if(CheckSubstring(nomFichier, nomTableau ) ){
                    cout << nomFichier<< endl;
                    break;
                }
     
     
            }
     
      }
      closedir (dir);
    } else {
      /* could not open directory */
      perror ("");
     
    }
    }

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    - si tu espères retourner quelque chose, faut commencer par avoir une directive return
    - retourner un DIR* implique que l'appelant devra faire le closedir lui-même, pas top
    > tu peux utiliser std::unique_ptr en surchargeant le second template qui est la fonction de libération afin de fournir un objet qui s'auto-détruirait correctement à la fin de sa portée
    - tu fais déjà un closedir dans ta fonction, donc tu retournerais quoi ?
    - dans un tel cas, mettre en place une classe de manipulation de dossier serait préférable imo
    - std::filesystem arrive en C++17 !

    C'est quoi le but de ta fonction ? Juste ouvrir un dossier ? Trouver un fichier à l'intérieur ? Ouvrir le fichier trouvé ? ... ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    J'irai chercher boost::file_system, en attendant le C++17.

    Visiblement, tu trouves que c'est bon.
    Un bon compilateur (correctement utilisé) trouverait qu'on sort d'une fonction non void sans return.

    Active les warnings de compilation, et corrige-les.

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

Discussions similaires

  1. Quote et double quote
    Par aktos dans le forum Langage
    Réponses: 8
    Dernier message: 05/01/2007, 19h55

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