Recensement simple et exhaustif d'une arborescence

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 133 fois - Téléchargée 29 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

Messages postés
14
Date d'inscription
mardi 24 octobre 2000
Statut
Membre
Dernière intervention
13 décembre 2005

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.
Messages postés
63
Date d'inscription
samedi 18 janvier 2003
Statut
Membre
Dernière intervention
15 décembre 2009

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.