Constitution récursive de liste de répertoire

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 230 fois - Téléchargée 36 fois

Contenu du snippet

Liste dans une tstringlist le contnue de tous les répertoire contenu dans le répertoire passé en paramètre. Je sais c'est basique mais ça peut toujours servir.

Source / Exemple :


procedure ConstitueListeFolder(sltRep: TStringList; sRepRacine: string; bRecur: boolean = true);
var
	sr: TSearchRec;
begin
	// On vérifie que la liste soit assigné
	if Assigned(sltRep) then
  begin
    sRepRacine:= IncludeTrailingBackslash(sRepRacine);
    if FindFirst(sRepRacine + '*.*', faDirectory, sr) = 0 then
    begin
      repeat
        if (sr.Name <> '.') and (sr.Name <> '..') then
        begin
          sltRep.Add(sRepRacine + sr.Name);
          // On recherche les répertoire contenue dans le répertoire trouvé
          if bRecur then
            ConstitueListeFolder(sltRep, sRepRacine + sr.Name);
        end;
      until (FindNext(sr) <> 0);
    end;
    FindClose(sr);
  end;
end;

A voir également

Ajouter un commentaire Commentaires
Messages postés
1106
Date d'inscription
samedi 8 novembre 2003
Statut
Membre
Dernière intervention
3 septembre 2006
22
En résumé, on le met ou on le met pas le VAR ??

Dans le code, j'ajouterai encore une ligne: sltRep.Clear juste après la vérification de l'assignation. Ce serait très bien de vider la liste avant de la remplir, non ?

Sinon sous Delphi 3 et 5, si le but de ce code est uniquement de récupérer les dossiers, alors il ne marche pas puisqu'il capte aussi les fichiers. Dans ce cas, il faut vérifier que chaque résultat est un dossier. Un exemple de cette fonction est disponible au code 27371.
Messages postés
110
Date d'inscription
jeudi 7 octobre 2004
Statut
Membre
Dernière intervention
19 février 2009

je suis d'accord avec toi ! Quand on fait du code 'neuf' dans un projet OK, mais en maintenance de code on a pas forcement le choix !
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
MHI: merci pour cette précision utile.
Mais, si l'on respecte un principe de base qui veut que c'est celui qui instancies (ou le propriétaire de l'objet) qui est chargé de la destruction, alors on ne devrait jamais rencontrer le problème.
Le passage d'un objet en paramètre Var est pour moi une anomalie d'écriture puisqu'il est d'office transmis par adresse et jamais par valeur (!...).
Messages postés
110
Date d'inscription
jeudi 7 octobre 2004
Statut
Membre
Dernière intervention
19 février 2009

Delphiprog, pour info, il ne faut pas faire de free et de create sur un objet qui n'est pas passé en VAR à une fonction, surtout si on renvoie cet objet (car on ne travaille plus sur les même adresse mémoire), dans ce cas il faut absoluement le passé en VAR. Je viens de rencontrer le problème au boulot sur des fuites mémoires.
Messages postés
1106
Date d'inscription
samedi 8 novembre 2003
Statut
Membre
Dernière intervention
3 septembre 2006
22
C'est simple... Et pour ceux interessés dans la récurrence dans la base de registre, qu'ils aillent voir le code source N°25662. C'est surpuissant...
Afficher les 8 commentaires

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.