IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

Liste fichiers suivant le format


Sujet :

Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 186
    Points : 84
    Points
    84
    Par défaut Liste fichiers suivant le format
    Bonjour,

    Pour le fun je créé un programme qui génère des fichiers m3u (playlist).

    Je cherche une fonction qui ne liste que les fichiers qui ont un format prédéfini.
    Je voudrais par exemple ne lister que les fichier au format mp3, wma, flac.

    Pour le moment j'utilise la fonction FindFirst mais apparemment je ne peux lister qu'un format ou tout le contenu du répertoire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if FindFirst(lstDir[i] + '\*.mp3', faAnyFile,Info) = 0 then

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 218
    Points : 311
    Points
    311
    Par défaut
    hello,
    j'ai plus delphi sous la main depuis un moment mais de mémoire, il me semble qu'en séparant les extensions avec des ";" ca doit marcher "*.mp3;*.wav" ...

  3. #3
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 466
    Points
    28 466
    Par défaut
    si ça fonctionne, j'apprend quelque chose

    sinon *.* et tester avec ExtractFileExt();

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 186
    Points : 84
    Points
    84
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if FindFirst(lstDir[i] + '*.mp3;*.wav', faAnyFile,Info) = 0 then
    ne fonctionne pas

    Par contre je ne vois pas à quoi pourrait me servir ExtractFileExt();
    Cette fonction permet uniquement d'extraire l'extension d'un fichier non ?

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par yamino Voir le message
    Je voudrais par exemple ne lister que les fichier au format mp3, wma, flac.
    Citation Envoyé par yamino Voir le message
    Par contre je ne vois pas à quoi pourrait me servir ExtractFileExt();
    Cette fonction permet uniquement d'extraire l'extension d'un fichier non ?
    Ben oui justement.
    A l'aide de cette fonction tu examines l'extension des fichiers énumérés par FindFirst/FindNext, et tu ne retiens que ceux qui t'intéressent.
    C'est bien le but, non ?

    @+

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 839
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 839
    Points : 13 603
    Points
    13 603
    Par défaut
    Perso, je préfère lancer une fois FindFirst par extension plutôt que de trier une recherche sur *.*

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 186
    Points : 84
    Points
    84
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Ben oui justement.
    A l'aide de cette fonction tu examines l'extension des fichiers énumérés par FindFirst/FindNext, et tu ne retiens que ceux qui t'intéressent.
    C'est bien le but, non ?

    @+
    Oui mais le problème c'est que j'aimerais que cela soit dynamique.
    En fait je stocks les extensions dans un fichier INI, lorsqu'il parcourt, via FindFirst/FindNext, j'aimerai qu'il ne me sorte que les types d'extensions que je lui ai défini.

    J'espère être clair

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 218
    Points : 311
    Points
    311
    Par défaut
    Paul Toth
    si ça fonctionne, j'apprend quelque chose
    Je dois confondre avec le FileListBox, regarde dans l'unité FileCtrl, tu devrais trouver ton bonheur, ca doit correspondre à ce qu'indique Andnotor.

  9. #9
    Membre confirmé
    Homme Profil pro
    Santé
    Inscrit en
    Septembre 2010
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2010
    Messages : 290
    Points : 534
    Points
    534
    Par défaut
    Salut,

    Moi je fais ça. Ca pourra sans doute t'aider... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    {Liste (avec ou sans chemin complet) les fichiers d'un répertoire filtrés par leur extension,
    ou tous les fichiers si aucune extension passée à la procedure.
    SortFlag = 0   => Liste triée par ordre alphabétique
    SortFlag = 1   => Liste triée par date de modification
    SortFlag = 2   => Liste triée par date de création}
     
    PROCEDURE FindFiles(Path: String; var ExtList, FilesList:  TStringList;
                             Const SortFlag : Integer = 0; Const  FullPathName : Boolean = false);
      VAR              FileInfo   : TSearchRec;
                             i               : Integer;
                            S               : string;
                            DateFormat : string;
     
     
              function IsWanted(FileName : String): Boolean;
                var        i : Integer;
                begin
                result := false;
                if (FileName='.') or (FileName='..') then exit;
                if ExtList.Count=0 then begin
                  result := true;
                  Exit;
                end;
                for i := 0 to ExtList.Count-1 do begin
                  if AnsiUpperCase(ExtractFileExt(FileName))=AnsiUpperCase(ExtList[i]) then begin
                    result := true;
                    Break;
                  end;
                end;
              end;
     
     
              function FileTimeToString(FileTime : TFileTime): String;
                var        SysTime    : TSystemTime;
                              LocalTime : TFileTime;
                begin
                result := '-------------------';
                if FileTimeToLocalFileTime( FileTime, LocalTime ) then begin
                  if FileTimeToSystemTime( LocalTime, SysTime ) then begin
                    result := DateTimeToStr(SystemTimeToDateTime(SysTime));
                  end;
                end;
              end;
     
     
      BEGIN
      Path := IncludeTrailingPathDelimiter(Path);
      if not DirectoryExists(Path) then Exit;
      DateFormat := ShortDateFormat;
      ShortDateFormat := 'yyyy/MM/dd';
      if FindFirst(Path+'*', faAnyFile, FileInfo)=0 then begin
        repeat
          if IsWanted(FileInfo.Name) then
          case SortFlag of
            0 : begin
                  if FullPathName then FilesList.Add(Path + FileInfo.Name)
                  else FilesList.Add(FileInfo.Name);
                end;
            1 : begin
                  if FullPathName then FilesList.Add(DateTimeToStr(FileDateToDateTime(FileInfo.Time)) + Path + FileInfo.Name)
                  else FilesList.Add(DateTimeToStr(FileDateToDateTime(FileInfo.Time)) + FileInfo.Name);
                end;
            2 : begin
                  if FullPathName then FilesList.Add(FileTimeToString(FileInfo.FindData.ftCreationTime) + Path + FileInfo.Name)
                  else FilesList.Add(FileTimeToString(FileInfo.FindData.ftCreationTime) + FileInfo.Name);
                end;
          end;
        Until FindNext(FileInfo)<>0;
      end;
      ShortDateFormat := DateFormat;//On rétablit le ShortDateFormat.
      if SortFlag <> 0 then begin
        FilesList.Sort;
        for i := 0 to FilesList.Count-1 do begin
          S := FilesList[i];
          Delete(S,1,19);//On élimine les dates.
          FilesList[i] := S;
        end;
      end;
      FindClose(FileInfo);
    END;

  10. #10
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    Yamino : Par contre je ne vois pas à quoi pourrait me servir ExtractFileExt();
    Voici un autre exemple de code utilisant ExtractFileExt: (testé sous D5)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    procedure ListeDossiersEtOuFichiers(Rep,ExtFichiers : string; Renvoyer : byte; var SL : tStringList);
    //        SL : renvoie les noms-longs des fichiers + éventuellement les noms des sous-dossiers
    //        Extensions = *.bmp*.jpg.*.txt (par exemple) sur une seule ligne pour renvoyer les fichiers *.bmp + *.jpg etc
    //        Si extension = chaîne vide ou *.* alors renvoyer tous les fichiers *.*
    //        Si renvoyer = 1 alors SL renvoie uniquement les noms des sous-dossiers (qq soit leur contenu)
    //                      2 alors SL renvoie les noms des sous-dossiers + les noms des fichiers
    //                      3 alors SL renvoie uniquement les noms des fichiers.
    var       SR : TSearchRec; ext : string;
    begin     Rep:=BackSlach(Rep); 
              ExtFichiers:=UpperCase(ExtFichiers);
              if FindFirst(Rep + '*.*', faAnyFile, SR) = 0 then begin
                 repeat
                    if (SR.Attr and faDirectory = faDirectory) and (SR.Name[1] <> '.') then begin
                        if (SR.Attr and faDirectory > 0) and (Renvoyer<=2) then SL.add(Rep+trim(SR.Name)+'\');
                        ListeDossiersEtOuFichiers(Rep + SR.Name, ExtFichiers, Renvoyer, SL); // Appel récursif
                    end else
                    if (renvoyer>=2) and (SR.Name[1] <> '.') then begin
                       ext:=UpperCase(ExtractFileExt(SR.Name));
                       if (ExtFichiers='') or (ExtFichiers='*.*') or (pos(ext,ExtFichiers)>0)
                       then SL.add(Rep+trim(SR.Name));
                    end;
                 until FindNext(SR) <> 0;
                 FindClose(SR);
              end;
    end;
    Utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.Button1Click(Sender: TObject);
    var       SL : tStringList; Rep : string;
    begin     RichEdit1.clear;
              Rep:=ExtractFilePath(Application.ExeName);
              RichEdit1.lines.Add('Recherche dans '+Rep);
              SL := tStringList.create;
              SL.Sorted:=true;
              ListeDossiersEtOuFichiers(Rep,'*.pas*.dpr*.res*.dof',3, SL);
              RichEdit1.lines.AddStrings(SL);
              SL.free;
    end;
    EDIT : Un oubli :
    La procedure ListeDossiersEtOuFichiers utilise Rep:=BackSlach(Rep); (non fournie) mais qui fait la même chose que Rep:= IncludeTrailingPathDelimiter(Rep); qui n'existe pas sous D5.


    A+.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 186
    Points : 84
    Points
    84
    Par défaut
    Avec toutes vos réponses j'ai trouvé ce que je cherchais

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Études] Liste de toutes les formations info
    Par Le Marlou dans le forum Etudes
    Réponses: 74
    Dernier message: 04/03/2021, 13h09
  2. Réponses: 4
    Dernier message: 15/05/2015, 11h22
  3. Imprimer automatiquement fichiers de plusieurs formats
    Par lutin511 dans le forum Windows
    Réponses: 5
    Dernier message: 07/12/2005, 19h38
  4. liste fichiers (TListView) avec icones
    Par pjb dans le forum C++Builder
    Réponses: 2
    Dernier message: 01/07/2005, 10h06
  5. Comment écrire un fichier texte au format MS-DOS ?
    Par fredfred dans le forum Langage
    Réponses: 9
    Dernier message: 20/01/2005, 10h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo