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

Messages postés
97
Date d'inscription
vendredi 12 octobre 2007
Dernière intervention
20 novembre 2009
- - Dernière réponse : Caribensila
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Dernière intervention
26 juillet 2018
- 16 févr. 2009 à 14:36
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.
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Dernière intervention
26 juillet 2018
3
Merci
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.

Merci Caribensila 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de Caribensila
Messages postés
1293
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
3
Merci
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

Merci sp40 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de sp40
Messages postés
97
Date d'inscription
vendredi 12 octobre 2007
Dernière intervention
20 novembre 2009
0
Merci
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!
Commenter la réponse de BernieNoel68
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Dernière intervention
26 juillet 2018
0
Merci
@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...
Commenter la réponse de Caribensila
Messages postés
1293
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
0
Merci
@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
Commenter la réponse de sp40
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Dernière intervention
26 juillet 2018
0
Merci
Bein oui...  
Commenter la réponse de Caribensila
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Dernière intervention
26 juillet 2018
Commenter la réponse de Caribensila

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.