Ordre des fichiers retourner par FindFirst (TSearchRec) [Résolu]

Signaler
Messages postés
92
Date d'inscription
vendredi 12 octobre 2007
Statut
Membre
Dernière intervention
20 novembre 2009
-
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
-
Bonjour a tous!

Je souhaiterais savoir si on peut determiner dans quel ordre la fonction FindFirst/FindNext trouve et cherche les fichiers d'un répertoire:

------------------------------------------------------------------------------------------------
var

  searchResult : TSearchRec;


begin
  // Try to find regular files matching Unit1.d* in the current dir

  if FindFirst( srcPath + '*.doc', faAnyFile, searchResult) = 0 then

  begin

    repeat

      ShowMessage('File name = '+searchResult.Name);

    until FindNext(searchResult) <> 0;

    // Must free up resources used by these successful finds

    FindClose(searchResult);

  end;

end;
------------------------------------------------------------------------------------------------

Dans mon cas il faudrait que les fichiers soient trouvés dans l'ordre de création (ou de dernière modification), mais je ne sais pas si cela est fait pas défaut, ou si l'ordre des fichiers retourner par FindFirst/FindNext est totalement aléatoire.

Merci d'avance a ceux qui auront une reponse a proposer.

7 réponses

Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
14
Bonjour,

FindFirst/FindNext te renvoie les fichiers triés par ordre alphabétique.
Pour obtenir un autre ordre, c'est à toi de le coder.
Voir un exemple ici.
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Salut Bernie,

Essaie ce code (ici, il remplit un composant Listbox (LB) avec la liste triée par ordre de création)
procedure TForm1.Chercher(Sender: TObject);
   procedure AddInList(ASL : TStringList; ARech : TSearchRec);
   begin
        if ARech.Attr <> faDirectory
           then ASL.Add(DateTimeToStr(FileDateToDateTime(ARech.Time)) +'|'+ ARech.Name);
   end;
var
{--------------------------------}
   LSR_Rech    : TSearchRec;
{--------------------------------}
   LSL_Rech    : TStringList;
{--------------------------------}
   i           : Integer;
{--------------------------------}
   LS_LongName : String;
{--------------------------------}
begin
     LSL_Rech := TStringList.Create;
     if FindFirst({Nom du répertoire} +'\*.*', faAnyFile, LSR_Rech) = 0 then begin
        AddInList(LSL_Rech, LSR_Rech);
        while FindNext(LSR_Rech) = 0
              do AddInList(LSL_Rech, LSR_Rech);
     end;
     FindClose(LSR_Rech);
     LSL_Rech.Sort;
     For i := 0 to LSL_Rech.Count - 1 do begin
         LS_LongName := LSL_Rech.Strings[i];
         LB.Items.Add(Copy(LS_LongName, Pos('|', LS_LongName) + 1, Length(LS_LongName)));
     end;
     LSL_Rech.Free;
end;

Désolé Caribensila, je l'avais sous la main...

Simon
Messages postés
92
Date d'inscription
vendredi 12 octobre 2007
Statut
Membre
Dernière intervention
20 novembre 2009
1
Merci a tous les deux, c'est la solution que j'avais adopté (trier en utilisant la propriété Time du TSearchRec).

Dans mon cas les noms de fichiers utilise un numéro incrémentale, donc le classement alphabétique correspond a la date de création/modification.

Mon problème est donc résolu, et ma lanterne éclairée!
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
14
@Simon



Attention! Je me permets de te signaler que ta fonction renvoie la liste triée par ordre de modification et non pas de création...
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
@Cari
Tu te permets bien...
Désolé, j'avais pas vu ton snippet la dernière fois...
Eh ! mais il n'y est plus ! Je voulais le récupérer pour m'updater.
T'avais la même erreur ?

Simon
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
14
Bein oui...  
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
14