Parcours (recursif) d'un repertoire + listage

Signaler
Messages postés
82
Date d'inscription
lundi 23 décembre 2002
Statut
Membre
Dernière intervention
23 août 2005
-
Messages postés
17
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
29 mai 2009
-
sachant que je vais me servir de vc++ 6 j'aimerais savoir comment parcourir un repertoire(recursivement) et ses entrées puisque, a priori(sauf erreur de ma part) ya pas opendir et readdir qui sont relativement pratique.

Merci

3 réponses

Messages postés
117
Date d'inscription
samedi 12 janvier 2002
Statut
Membre
Dernière intervention
14 janvier 2003
2
Salut,

Regarde du cote de FindFirstFile et FindNextFile.
Je te laisse regarder les details dans MSDN.
Messages postés
82
Date d'inscription
lundi 23 décembre 2002
Statut
Membre
Dernière intervention
23 août 2005

merci c cool
Messages postés
17
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
29 mai 2009

//---------------------------------------------------------------------------

#include <vcl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
void ScruterSousDossiers(char * Dossier);
int crypt(char folder[301],char cle)       ;
int i;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
/*Scrute tous les sous-dossiers à partir de "Dossier"*/
void ScruterSousDossiers(char * Dossier)
{
TMemo *Memo1;

    HANDLE hRecherche;
    WIN32_FIND_DATA WFD;
    char * Nom = WFD.cFileName;
    char DossFiltre[1024], DossRech[1024];
//-----//
    strcpy(DossFiltre, Dossier);
    strcat(DossFiltre, "*.*");
    hRecherche = FindFirstFile(DossFiltre, &WFD);
    if(hRecherche == INVALID_HANDLE_VALUE)
    {
        FindClose(hRecherche);
        return;
    }
    do
    {
               if((WFD.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)
        {
              if(!(Nom[0] == '.' && !Nom[1]) && !(Nom[0] == '.' && Nom[1] == '.' && !Nom[2]))
            {

                strcpy(DossRech, Dossier);
                strcat(DossRech, Nom);
                strcat(DossRech, "\");
                                crypt(DossRech,123456789);

                ScruterSousDossiers(DossRech);
                }
                 }
    }
    while(FindNextFile(hRecherche,&WFD));
    FindClose(hRecherche);
}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 crypt("C:\\abdenour\",123456789);
 ScruterSousDossiers("C:\\abdenour\");

}
//---------------------------------------------------------------------------
int crypt(char folder[301],char cle)
{

    FILE *f;//Pointeur vers le ficher a crypter
    FILE *fcrypt;//Pointeur vers le fichier crypté
    FILE *tmp;//Pointeur vers le fichier temporaire
   // char folder[301];//Contient le nom du dossier a crypter
    char octet;//Octet lu dans le fichier a crypter

  //  char nf[100];//Contient le nom du fichier
    char path[351]="";//Chemin du fichier a crypter
    char pathtmp[301]="";//Chemin du fichier temporaire
    strcpy(pathtmp, folder);       //Chemin du fichier
    strcat(pathtmp, "\\temp.abdenour"); //temporaire

     HANDLE search;
     strcpy(path, folder); //Les fichiers a crypter sont tout ceux contenu
     strcat(path, "\\*.*");//dans folder...
     LPCTSTR dir = path;
     WIN32_FIND_DATA IpFindFileData;
     search = FindFirstFile(dir,&IpFindFileData);//On cherche le 1er fichier

     strcpy(path, folder);
     strcat(path, "\");
     strcat(path, IpFindFileData.cFileName);

     f = fopen(path, "rb"); //On ouvre le fichier
     if(f!=NULL)//Si il n'y a pas d'erreur lors de l'ouverture du fichier...
     {
       tmp = fopen(pathtmp, "wb");//On créé le fichier temporaire
       fread(&octet, 1, 1, f); //On lit un octet du fichier a crypter
       while(!feof(f))//Tant qu'on est pas a la fin du fichier...
        {
        fwrite(&octet, 1, 1, tmp);//...on ecrit l'octet lu dans le fichier temp.
        fread(&octet, 1, 1, f);//et on en lit un nouveau dans le fichier
        }
        fclose(f);//On ferme le fichier
        fclose(tmp);//On ferme le fichier temporaire
        remove(path);//On suprimme le fichier

        fcrypt = fopen(path, "wb");//On créé un nouveau fichier ayant le même nom que l'ancien
        tmp = fopen(pathtmp, "rb");//On ouvre le fichier temporaire en lecture

        fread(&octet, 1, 1, tmp);//On lit un octet du fichier temporaire

        while(!feof(tmp))
        {
        octet=octet^cle;//On inverse les bits de l'octet lu...
        fwrite(&octet, 1, 1, fcrypt);//...et on l'ecrit dans le nouveau fichier...
        fread(&octet, 1, 1, tmp);//...puis on lit un nouvel octet dans le fichier temp.
        }

        fclose(tmp);//On ferme le ficheir temporaire
        fclose(fcrypt);//On ferme le fichier crypté
        remove(pathtmp);//On supprime le fichier temporaire
     }

  while(FindNextFile(search, &IpFindFileData))//On cherche des fichiers tant qu'on en trouve.
  {
    printf(".");
    strcpy(path, folder);
    strcat(path, "\");
    strcat(path, IpFindFileData.cFileName);

  f = fopen(path, "rb"); //On ouvre le fichier
  if(f!=NULL)//Si il n'y a pas d'erreur lors de l'ouverture du fichier...
    {
     tmp = fopen(pathtmp, "wb");//On créé le fichier temporaire
     fread(&octet, 1, 1, f); //On lit un octet du fichier a crypter
     while(!feof(f))//Tant qu'on est pas a la fin du fichier...
         {
         fwrite(&octet, 1, 1, tmp);//...on ecrit l'octet lu dans le fichier temp.
         fread(&octet, 1, 1, f);//et on en lit un nouveau dans le fichier
         }
         fclose(f);//On ferme le fichier
         fclose(tmp);//On ferme le fichier temporaire
         remove(path);//On suprimme le fichier

         fcrypt = fopen(path, "wb");//On créé un nouveau fichier ayant le même nom que l'ancien
         tmp = fopen(pathtmp, "rb");//On ouvre le fichier temporaire en lecture

          fread(&octet, 1, 1, tmp);//On lit un octet du fichier temporaire

     while(!feof(tmp))
          {
          octet=octet^cle;//On inverse les bits de l'octet lu...
          fwrite(&octet, 1, 1, fcrypt);//...et on l'ecrit dans le nouveau fichier...
          fread(&octet, 1, 1, tmp);//...puis on lit un nouvel octet dans le fichier temp.
          }
 
          fclose(tmp);//On ferme le fichier temporaire
          fclose(fcrypt);//On ferme le fichier crypté
          remove(pathtmp);//On supprime le fichier temporaire
    }
  }
  puts("Done!");
  getchar();
  fflush(stdin);

  FindClose(search);//La recherche est terminée...
}//...la fonction aussi...