Filtrage multiple à l'aide de FindFirst [Résolu]

John Dogget 390 Messages postés vendredi 18 juin 2004Date d'inscription 7 mai 2009 Dernière intervention - 30 mars 2007 à 16:12 - Dernière réponse : John Dogget 390 Messages postés vendredi 18 juin 2004Date d'inscription 7 mai 2009 Dernière intervention
- 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
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Loulibier 323 Messages postés jeudi 6 juin 2002Date d'inscription 24 septembre 2008 Dernière intervention - 30 mars 2007 à 17:06
3
Merci
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.

Merci Loulibier 3

codes-sources a aidé 80 internautes ce mois-ci

Commenter la réponse de Loulibier
WhiteHippo 1270 Messages postés samedi 14 août 2004Date d'inscription 5 avril 2012 Dernière intervention - 30 mars 2007 à 17:03
0
Merci
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
Commenter la réponse de WhiteHippo
John Dogget 390 Messages postés vendredi 18 juin 2004Date d'inscription 7 mai 2009 Dernière intervention - 30 mars 2007 à 17:45
0
Merci
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
Commenter la réponse de John Dogget

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.