Filtrage multiple à l'aide de FindFirst

Résolu
Signaler
Messages postés
384
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009
-
Messages postés
384
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009
-
Bonjour à tous.

Je souhaiterais lister tous les fichiers images (bmp, jpg, ico etc) contenue dans un dossier.
Pour ça j'utilise FindFirst comme ceci :

var
    IdentifiantFichier:TSearchRec;
...
if FindFirst(Dossier+'*.*',faAnyfile,IdentifiantFichier)=0 then
    ...

Ca marche très bien mais pour une seule extention de fichier.
En fait, je voudrais remplacer le '*.*' de mon code par un filtre qui me permette de voir tous les fichiers images en une fois, l'interet etant de ne lancer un FindFirst qu'une fois.

Est'ce possible ?
Comment faire ?

Merci à vous

3 réponses

Messages postés
309
Date d'inscription
jeudi 6 juin 2002
Statut
Membre
Dernière intervention
24 septembre 2008
2
bonjour John Dogget,

Si j'ai bien compris ton priblème, j'utiliserais ta façon de faire.
Je chercherais tous les fichiers du répertoire et les fichiers au moment de les ajouter à ta liste.

exemple :

var
    IdentifiantFichier:TSearchRec;
    slListFiles : TStringList;
...

slListFiles := TStringList.Create;

if FindFirst(Dossier + '*.*', faAnyfile, IdentifiantFichier)=0 then
begin
  repeat
      if (IdentifiantFichier.Name <> '.') and (IdentifiantFichier.Name <> '..') and ((IdentifiantFichier.Attr and faDirectory) = 0) then
      begin
         if SameText(ExtractFileExt(IdentifiantFichier.Name), '.jpg') or
            SameText(ExtractFileExt(IdentifiantFichier.Name), '.bmp') or
            SameText(ExtractFileExt(IdentifiantFichier.Name), '.ico') then
          slListFiles.Add(IdentifiantFichier.Name);
      end;



      Application.ProcessMessages;



    until (FindNext(IdentifiantFichier) <> 0);
end;

slListFiles.Free;






Bonne Prog,  Olivier
PS : Lorsqu'une réponse vous convient, n'oubliez pas de la valider.
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
Bonsoir,
Deux possibilités, mais certainement pas celle que tu attendais  car on ne peut pas spécifier un masque multiple dans les paramètres.
 1 - Faire N boucles avec une extension à la fois (pas terrible, je sais )
 2 - Faire une seule boucle, il faut utiliser un "*.*", comme tu as fais, et implémenter ton propre test :

   if ( ExtractFileExt(SearchRec.Name) = Uppercase('bmp')  ) then
   begin
     // ...
   end else
   if ( ExtractFileExt(SearchRec.Name) = Uppercase('jpg')  ) then
   begin
     // ...
   end ;  

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
Messages postés
384
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009

Deux bonnes réponses.
Donc c'est bien ce que je pensais, la capacité de filtrage de Findfirst est pas terrible
Il faut filtrer après coup ...

Donc merci à vous deux