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

BernieNoel68 97 Messages postés vendredi 12 octobre 2007Date d'inscription 20 novembre 2009 Dernière intervention - 11 févr. 2009 à 11:27 - Dernière réponse : Caribensila 2674 Messages postés jeudi 15 janvier 2004Date d'inscription 11 mai 2018 Dernière intervention
- 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
Caribensila 2674 Messages postés jeudi 15 janvier 2004Date d'inscription 11 mai 2018 Dernière intervention - 11 févr. 2009 à 12:01
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 124 internautes ce mois-ci

Commenter la réponse de Caribensila
Meilleure réponse
sp40 1293 Messages postés mardi 28 octobre 2003Date d'inscriptionContributeurStatut 3 juillet 2015 Dernière intervention - 11 févr. 2009 à 12:04
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 124 internautes ce mois-ci

Commenter la réponse de sp40
BernieNoel68 97 Messages postés vendredi 12 octobre 2007Date d'inscription 20 novembre 2009 Dernière intervention - 11 févr. 2009 à 12:12
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
Caribensila 2674 Messages postés jeudi 15 janvier 2004Date d'inscription 11 mai 2018 Dernière intervention - 13 févr. 2009 à 16:05
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
sp40 1293 Messages postés mardi 28 octobre 2003Date d'inscriptionContributeurStatut 3 juillet 2015 Dernière intervention - 13 févr. 2009 à 18:15
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
Caribensila 2674 Messages postés jeudi 15 janvier 2004Date d'inscription 11 mai 2018 Dernière intervention - 13 févr. 2009 à 18:19
0
Merci
Bein oui...  
Commenter la réponse de Caribensila
Caribensila 2674 Messages postés jeudi 15 janvier 2004Date d'inscription 11 mai 2018 Dernière intervention - 16 févr. 2009 à 14:36
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.