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.
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.