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 les fichiers d'un repertoire "à l'aveugle"


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 12
    Points : 14
    Points
    14
    Par défaut Parcourir les fichiers d'un repertoire "à l'aveugle"
    Bonjour @ tous,

    Voilà j'ai un petit problème : je possède un répertoire rempli à ras bord de photos auxquelles j'applique un algorithme de traitement d'image qui me retourne une valeur numérique.

    Seulement cet algo est codé pour appliqué le code à UNE image : il faut en gros rentrer son nom en paramètre (string). J'aimerais donc pouvoir répéter cette fonction de manière automatique pour chacune des photos de ce répertoire, sans que le programme ait besoin de connaître leur nom (car il n'y a pas de logique, les photos ne s'appellent pas photo1, photo2, photo3...)

    Pour résumer, ce serait un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    tant qu'il reste des fichiers dans le répertoire
    {
        resultat_retourné = algoTraitementImage(fichier);
        fichier = fichier suivant;
    }
    Je sais c'est très moche comme présentation mais c'est pour ne pas brouiller les pistes je souhaite bien parcourir un répertoire fichier par fichier sans savoir combien il y en a.

  2. #2
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    Hello,

    Sur quel OS travailles tu ?
    Si tu bosses sous Win32, tu peux utiliser l'API FindFirstFile() (voir sur le MSDN), ou bien, du coté de chez Boost, tu as un itérateur sur les fichiers d'un répertoire (http://www.boost.org/doc/libs/1_43_0.../doc/index.htm)

  3. #3
    Membre averti Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    Points : 323
    Points
    323
    Par défaut
    Bonjour,
    Voici une solution utilisant boost::filesystem:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    directory_iterator end_itr; // default construction yields past-the-end
    for(directory_iterator fichier( dir_path );
        fichier != end_itr;
        ++fichier)
      resultat_retourné = algoTraitementImage(fichier);

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Bonjour, merci de vos réponses.

    Je code sous Windows mais j'aimerais pouvoir faire cette manipulation sans installer de libraires supplémentaires (ici Boost en l'occurrence). Surtout que je suis allé voir du côté de la doc et ça me parlait pas beaucoup ^^ (je suis débutant).

    J'ai donc préféré la méthode FindFirstFile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    HANDLE FindHandle = INVALID_HANDLE_VALUE;
            WIN32_FIND_DATA FindData;
            string FileName = ".\\*.*";   // . specifies the current directory
            FindHandle = FindFirstFile(FileName.c_str(), &FindData);
            if (INVALID_HANDLE_VALUE != FindHandle)
            {
                while (FindNextFile(FindHandle, &FindData) != 0)
                {
                    cout << FindData.cFileName << endl;
                }
                FindClose(FindHandle);
            }
    Ça marche, seulement je n'arrive pas à changer cette ligne là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string FileName = ".\\*.*";   // . specifies the current directory
    pour lui indiquer le répertoire que je veux (ça marche pour le répertoire courant, mais pas si je lui mets par exemple "../dossier"). D'ailleurs c'est la première fois que je vois ce ".\\*.*" , c'est quelque chose de standard ??

    Si vous savez comment faire je suis preneur

    EDIT : en fait j'ai trouvé (boulet -_-...), il faut mettre ../dossier/*.*

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 188
    Points : 248
    Points
    248
    Par défaut
    Citation Envoyé par Biotik Voir le message
    . D'ailleurs c'est la première fois que je vois ce ".\\*.*" , c'est quelque chose de standard ??
    en fait en C/C++ le caractère '\' est un caractère spécial. il te permet de représenté un retour a la ligne '\n', une tabulation '\t', un signal sonore '\a', et bien d'autre. il te permet aussi d'échapper les caractères spéciaux qui sont au nombre de.. 2 : le caractère " et le caractère \ évidement. donc pour faire un guillemet tu fais \" et pour un antislash \\ .

    Tout sa pour dire que ".\\*.*" devient ".\*.*" . ce qui signifie tous les fichiers du répertoire courant.

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

Discussions similaires

  1. Parcourir les fichiers d'un repertoire
    Par scons dans le forum VBA Access
    Réponses: 7
    Dernier message: 08/09/2008, 15h59
  2. Copier les fichiers d'un répertoire dont la date est supérieure à x
    Par tatayoyo dans le forum Shell et commandes GNU
    Réponses: 17
    Dernier message: 03/10/2006, 14h28
  3. Parcourir les fichier du disque
    Par developpeur_mehdi dans le forum Langage
    Réponses: 2
    Dernier message: 14/12/2005, 09h27
  4. [TP]Lister les fichiers d'un répertoire
    Par nvtitan dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 21/06/2002, 11h22

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