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++Builder Discussion :

Chemin d'accès des fichiers dans des sous rep


Sujet :

C++Builder

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 16
    Points : 9
    Points
    9
    Par défaut Chemin d'accès des fichiers dans des sous rep
    Bonjour,

    Je cherche une petite solution pour obtenir le chemin d'accès de tous les fichiers d'un répertoire, ansi que ceux des fichiers contenus dans les sous dossiers de ce dossier source.

    J'ai lu cette methode
    http://c.developpez.com/faq/bcb/?pag...iersrepertoire

    J'ai adapté un peu ca pour mettre les chemins d'accès des fichiers dans un vecteur.

    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
    void Enregistrement::Search(AnsiString FilePath, AnsiString source)
    {
      //************************************
      //  Permet de lister tous les fichiers d'un répertoire
      //************************************
      TSearchRec Infos_fichier;
      if (!FindFirst(source+"/*.*", faAnyFile, Infos_fichier))
     
      do
      {
          if (ExtractFileExt(Infos_fichier.Name).LowerCase() != ""
              &&
               ExtractFileExt(Infos_fichier.Name).LowerCase() != "."
              &&
               ExtractFileExt(Infos_fichier.Name).LowerCase() != ".."
               )
          {
          //Petit tour de pass pass pas beau  si on selectionne un disque dur
          vecFichiers.push_back(Infos_fichier.Name);
     
          if(source.Length() == 3)
           vecFichiers.push_back(source+Infos_fichier.Name);
          else
           vecFichiers.push_back(source+"\\"+Infos_fichier.Name);
          }
      }
      while(!FindNext(Infos_fichier));
     
      FindClose(Infos_fichier);
     
    }
    Mais avec ca je n'ai pas les chemins d'accès des fichiers des sous répertoires.

    Je pense qu'il faudrait une methode récursive, mais je ne maitrise pas le sujet.

    merci de votre aide.

  2. #2
    Futur Membre du Club
    Inscrit en
    Mai 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    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
    void  Enregistrement::ListerFichiers(AnsiString NomRep, AnsiString extension, bool SousRep)
    {
     TSearchRec Rec;
     int trouve;
     
     if (NomRep.SubString(NomRep.Length(),1) !="\\") NomRep+="\\";
     trouve = FindFirst(NomRep+"*."+extension, faAnyFile, Rec);
     while (trouve == 0)
     {
      if((Rec.Name[1]!='.') && (Rec.Name[1]!='..') )
        vecFichiers.push_back(NomRep+Rec.Name);
     
      if ((Rec.Attr && faDirectory >0) && (Rec.Name[1] != '.') && (SousRep == true))
       ListerFichiers( NomRep+Rec.Name, extension, true);
      trouve = FindNext(Rec);
     }
     FindClose(Rec);
    }
    En fouillant dans les baffons du forum, j'ai presque trouvé mon bonheur

    Mais a cause de ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      if((Rec.Name[1]!='.') && (Rec.Name[1]!='..') )
        vecFichiers.push_back(NomRep+Rec.Name);
    il me fait un warning
    [C++ Warning] enregistrement.cpp(43): W8068 Constant out of range in comparison

    Ensuite la j'ai tout ce que je fais, mais j'ai aussi les sous répertoires dans mon vector. je pensais donc mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      if((Rec.Name[1]!='.') && (Rec.Name[1]!='..') && (Rec.Name[1]!='') )
        vecFichiers.push_back(NomRep+Rec.Name);
     
    Mais alors ca plante
     
    [C++ Error] enregistrement.cpp(43): E2129 Character constant must be one or two characters long
     
    merci
    [/code]

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    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
    void  Enregistrement::ListerFichiers(AnsiString NomRep, AnsiString extension, bool SousRep)
    {
     TSearchRec Rec;
     int trouve;
     
     if (NomRep.SubString(NomRep.Length(),1) !="\\") NomRep+="\\";
     trouve = FindFirst(NomRep+"*."+extension, faAnyFile, Rec);
     while (trouve == 0)
     {
      if(Rec.Attr == faArchive)
        vecFichiers.push_back(NomRep+Rec.Name);
     
      if ((Rec.Attr && faDirectory >0) && (Rec.Name[1] != '.') && (SousRep == true))
       ListerFichiers( NomRep+Rec.Name, extension, true);
      trouve = FindNext(Rec);
     }
     FindClose(Rec);
    }

  4. #4
    Membre averti
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Points : 403
    Points
    403
    Par défaut
    Citation Envoyé par Le Veilleur
    En fouillant dans les baffons du forum, j'ai presque trouvé mon bonheur

    Mais a cause de ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      if((Rec.Name[1]!='.') && (Rec.Name[1]!='..') )
        vecFichiers.push_back(NomRep+Rec.Name);
    il me fait un warning
    [C++ Warning] enregistrement.cpp(43): W8068 Constant out of range in comparison
    Normal...Rec.Name[1] est un seul caractère et t'es entrain de le comparer à '..' qui est deux chars.
    "Don't think you are, know you are..." (Morpheus)

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Neo41
    Citation Envoyé par Le Veilleur
    En fouillant dans les baffons du forum, j'ai presque trouvé mon bonheur

    Mais a cause de ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      if((Rec.Name[1]!='.') && (Rec.Name[1]!='..') )
        vecFichiers.push_back(NomRep+Rec.Name);
    il me fait un warning
    [C++ Warning] enregistrement.cpp(43): W8068 Constant out of range in comparison
    Normal...Rec.Name[1] est un seul caractère et t'es entrain de le comparer à '..' qui est deux chars.
    Oui, je me suis rendu compte de cette bourde, alors j'ai mis ca a la place
    if(Rec.Attr == faArchive)

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

Discussions similaires

  1. Script shell pour renommer des fichiers dans des sous répértoires
    Par ibuto dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 25/12/2013, 20h52
  2. Récupérer des fichiers dans des repertoires et sous répertoires
    Par philcphilc dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 05/09/2013, 19h37
  3. Réponses: 12
    Dernier message: 11/05/2012, 11h17
  4. Creer des fichiers dans un sous repertoire
    Par maxmarie dans le forum Windows Mobile
    Réponses: 4
    Dernier message: 16/11/2007, 15h30
  5. [VBA-E]Y-a-t-il des fichiers dans les sous-rep de mon rep ?
    Par Kaiba dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/04/2007, 22h28

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