Filtrage multiple à l'aide de FindFirst

Résolu
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009 - 30 mars 2007 à 16:12
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009 - 30 mars 2007 à 17:45
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

Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
30 mars 2007 à 17:06
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.
3
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
30 mars 2007 à 17:03
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
0
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
30 mars 2007 à 17:45
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
0
Rejoignez-nous