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

Langage C++ Discussion :

Rechercher fichier par extension


Sujet :

Langage C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 127
    Points : 49
    Points
    49
    Par défaut Rechercher fichier par extension
    Bonjour, je cherche à coder simplement une fonction qui prenne en paramètre le nom d'un répertoire (chemin absolu) et qui extrait le nom de fichier pour une extension donnée.

    En fait la problème est le suivant. Soit un ensemble de fichier nom.N*, *=0..5.
    Il y a forcément un fichier nom.N* mais pas forcément tous. Par exemple, les combinaisons d'extensions suivantes sont possibles:

    {nom.N0, nom.N2, nom.N5}
    {nom.N4, nom.N5}
    {nom.N0, nom.N1}

    Je cherche à extraire le préfixe nom de mon répertoire. Par exemple, pour
    {nomh.N0, nomh.N1} la fonction doit me renvoyer "nomh". Je ne vois pas trop comment faire ça de manière esthétique. Toute suggestion est donc la bienvenue.

    Cordialement,

  2. #2
    Membre habitué

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2004
    Messages : 126
    Points : 129
    Points
    129
    Par défaut
    Une solution pourrait être d'utiliser les expressions régulières. Par exemple, en utilisant les bibliothèques boost :

    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
     
    std::string ma_fonction (const std::string& strCheminAbsolu)
    {
       boost::filesystem::path pCheminAbsolu (strCheminAbsolu);
       boost::filesystem::path pFichier;
       boost::filesystem::directory_iterator itRepertoire ( pCheminAbsolu );
     
       boost::match_results<string::const_iterator> sResultat;
       boost::regex pattern("([a-zA-Z]*)\\.N[0-5]{1}");
     
       std::string strNomFichier = "";
     
       for( itRepertoire; itRepertoire != boost::filesystem::directory_iterator(); ++itRepertoire )
        {
            if( !boost::filesystem::is_directory( *itRepertoire ) )
    	  {
     
                      pFichier = ( *itRepertoire );
                      bool match = boost::regex_match(pFichier.filename(), sResultat, pattern);
     
                      if (match)
                      {
                             strNomFichier = sResultat[1];
                             return strNomFichier;
                      }
     
    	  }
       }
     
    return strNomFichier;
    }
    Pas testé et pas optimal (un return dans un for... ça risque d'en faire bondir plus d'un) mais ça pourrait être une piste!

    [EDIT] : Désolé pour la première version très bancale... j'ai validé mon post sans le faire exprès...

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    1/Si tu passes par boost, il me semble que Boost.FileSystem devrait te suffire : parcourir dans ton répertoire les fichiers "*.n?" puis récupérer uniquement leur nom sans extension

    2/De façon non portable et spécifique à Windows, tu peux arriver à la même chose avec CFileFind (MFC) ou FindFirstFile/FindNextFile/GetFullPathName (Win32)

  4. #4
    Invité
    Invité(e)
    Par défaut
    Sous windows, tu as findfirst() et findnext(), fonction de la librairie C (dans dir.h, je crois), ca existe sous tous les compilateurs, et c'est exactement ce que tu recherches...

    En Posix, et parfois sous windows, tu as opendir/readdir/closedir, qui lisent les fichiers d'un répertoire donné. C'est garanti sous les unix et autres, mais pas mal de compilateurs windows le fournissent également.

    Francois

Discussions similaires

  1. Shell script pour compter le nombre de fichiers par extension
    Par andress33 dans le forum Shell et commandes GNU
    Réponses: 16
    Dernier message: 30/03/2015, 01h26
  2. recherche recursive de fichier par extension-date-heure
    Par grundraisin dans le forum VBScript
    Réponses: 10
    Dernier message: 16/09/2009, 12h48
  3. Réponses: 1
    Dernier message: 11/05/2009, 13h47
  4. Sélectionner un fichiers par extension
    Par Michaël dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 24/06/2006, 22h42
  5. [apache] .htaccess -> bloquer fichiers par extensions
    Par yann_441 dans le forum Apache
    Réponses: 2
    Dernier message: 01/07/2005, 18h14

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