Lister tous les fichiers d'un repertoire

Contenu du snippet


{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;



{Exemple 1
Liste les fichiers *.txt et *.rtf triés par ordre de création
avec leur chemin complet :


var  ExtList   : TStringList;
       FilesList : TStringList;
...

ExtList    := TStringList.Create;
FilesList := TStringList.Create;
try
  ExtList.Add('.txt');
  ExtList.Add('.rtf');
  FindFiles(Edit1.Text, ExtList, FilesList, 2, true);
  ListBox1.Items.Assign(FilesList);
finally
  FilesList.Free;
  ExtList.Free ;
end;}


{Exemple 2
Liste tous les fichiers triés par ordre alphabétique :


var  ExtList   : TStringList;
       FilesList : TStringList;
...

ExtList    := TStringList.Create;
FilesList := TStringList.Create;
try
  FindFiles(Edit1.Text, ExtList, FilesList);
  ListBox1.Items.Assign(FilesList);
finally
  FilesList.Free;
  ExtList.Free ;
end; }



Compatibilité : Delphi 5

Disponible dans d'autres langages :

A voir également

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.