[C++] Parcours de fichiers dans un répertoire

Fom -  
blurk Messages postés 486 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à toutes et à tous,
Voila mon petit problème : j'aimerai, pour un path donné (c'est un répertoire), parcourir le contenu de ce répertoire et pouvoir sélectionner tous les sous-répertoires contenus dans le répertoire de base. Mon but étant d'explorer l'arborescence des répertoires à partir du path d'origine (parcours en préordre...).

Je code en C++ et j'ai essayé avec la méthode FindFirst, GetCurrentDir et encore d'autre et je n'arrive à rien. Quelqu'un aurait-il une petite idée pour moi?

Un grand merci d'avance!
salutations.
Fom
A voir également:

1 réponse

blurk Messages postés 486 Date d'inscription   Statut Membre Dernière intervention   160
 
salut,

voilà une fonction qui copie un repertoire et toute son arborescence
fichiers compris vers un autre répertoire,
comme la commande msdos xcopy, mais c'est une vieille histoire
avec quelques retouches ce qui suit devrait t'être utile

cordialement

#include <stdio.h>
#include <dir.h>

void  copydir(char *repsource, char *repcible);
void  copyfile(char *Fsource,char *Fcible);

void  copydir(char *repsource, char *repcible)
{
char nomfic[256],search[256];
char fichiersource[256],fichiercible[256];
struct ffblk ffblk;
strcpy(search,repsource);
strcat(search,"\\*");
int done;
int nbfic=0;
   while (true)
   {
      if(!nbfic)
        {done = findfirst(search,&ffblk,FA_RDONLY + FA_DIREC);}
      else
        {done = findnext(&ffblk);}
      if (done) break;
      strcpy(nomfic,ffblk.ff_name);
      strcpy (fichiersource,repsource);      strcat (fichiersource,"\\");
      strcat (fichiersource,nomfic);
      strcpy (fichiercible,repcible);      strcat (fichiercible,"\\");
      strcat (fichiercible,nomfic);
      if(ffblk.ff_attrib &  FA_DIREC)
        {
        int i;
        for(i=strlen(fichiersource);i>0 && fichiersource[i]!='\\';--i);
        if(fichiersource[i+1]!='.') // ne pas copier les dosiers parents
          {
          mkdir(fichiercible);
          copydir(fichiersource,fichiercible);
         // recursif pour sous repertoires
          }
        }
      else
        {
        copyfile(fichiersource,fichiercible);
        }
      nbfic++;
   }

}

// copier un fichier et choisir de le renomer
void  copyfile(char *Fsource,char *Fcible)
{
FILE *source, *cible;
source =fopen(Fsource,"rb");
cible =fopen(Fcible,"wb");

while(true)
  {
  register c=fgetc(source);
  if(feof(source))break;
  fputc(c,cible);
  }

fclose(cible);
fclose(source);
}

5