Recensement simple et exhaustif d'une arborescence

0/5 (2 avis)

Snippet vu 4 363 fois - Téléchargée 30 fois

Contenu du snippet

Le répertoire A a 4 sous-repertoires A1,A2,A3,A4 qui ont eux-même 4 sous-repertoires.
On veut lister les fichiers du répertoire A au "sous-sous-sous-repertoire" Annnn.
Une solution en boucle un TstringList qui sert d'entree en recherche et s'alimente du resultat de la recherche.

Source / Exemple :


procedure TForm1.CreerlisteRep(RepRacine: string);
var   cc,dd:integer;
      entreeL:string;
      xr:TsearchRec;

begin
//BUT :RECENSER TOUS LES SOUS-REP SUSCEPTIBLES DE CONTENIR
//DES FICHIERS

//sur la base d'un repertoire racine ajouté à la liste des sous rep
//-on recherche un sous-repertoire
//-si on le trouve on le rajoute à la liste des sous-rep et
//ajoute +1 au nb d'items figurant dans la liste
//-plus loin, ce sous-repertoire servira de répertoire racine
//-l'opération est terminée quand l'indice incrémenté=nb d'items -1

  //mise à blanc
  ListeSousRep.Clear;
  //récupération premier repertoire
  ListeSousRep.add(RepRacine);

  //nb d'item de départ
  dd:=ListeSousRep.Count;

  //indice de la liste
  cc:=0;
  //boucle tant que indice<nb items-1
  while CC<=dd-1 do
     begin //a2
         //repertoire racine
        entreeL :=ListeSousRep.strings[cc];
        //recherche de sous-rep
        if findfirst(entreeL+'*.*',FaDirectory,xr)=0 then
          begin  //a1
            //ajout si sous-rep trouve et incrementation de 1 de dd
            if (xr.name[length(xr.name)]<>'.')
               and ((xr.Attr and faDirectory)=FaDirectory)
               and  (ListeSousRep.IndexOf(entreeL+xr.name+'\')=-1) then
                  begin
                    ListeSousRep.Add(entreeL+xr.name+'\');
                    dd:=dd+1;
                  end;
            //boucle de recherche
            while findnext(xr)=0 do
              begin
                  if (xr.name[length(xr.name)]<>'.')
                     and ((xr.Attr and faDirectory)=FaDirectory)
                     and  (ListeSousRep.IndexOf(entreeL+xr.name)=-1) then
                      begin
                        ListeSousRep.Add(entreeL+xr.name+'\');
                        dd:=dd+1;
                      end;
              end;
          end; //a1
          //fermeture recherche pour repertoire racine
          findClose(xr);
          //incrementation de l'indice de liste
          cc:=cc+1;
     end; //a2
End;

Conclusion :


Procedure exigeant un string en entree.
La boucle s'arrête quand l'indice d'interrogation est egal au nb d'items-1.

A voir également

Ajouter un commentaire Commentaires
AhmedBoudali Messages postés 14 Date d'inscription mardi 24 octobre 2000 Statut Membre Dernière intervention 13 décembre 2005
19 déc. 2003 à 14:13
Et pourquoi pas ?
Cela vaut bien "une chaîne de caractère ..." qui sans "s" ressemble à une chaîne avec de la personnalité.

PS plus sérieux : dans mon code, la TstringList "ListeSousRep" doit être déclarée hors de la procédure.
ffert Messages postés 63 Date d'inscription samedi 18 janvier 2003 Statut Membre Dernière intervention 15 décembre 2009
19 déc. 2003 à 12:26
Salut,

J'avais déjà trouvé une source pour faire cela ailleurs mais ta source à l'air un peu plus simple que celle que j'avais utilisée (qui utilisé déjà le Tserchrec...).

Merci.

PS : un string (tout le monde connait) <> une string (chaine de caractère...)

à+

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.