Trier par date lors d'un findfirst/findnext [Résolu]

Messages postés
121
Date d'inscription
jeudi 24 janvier 2002
Dernière intervention
13 avril 2010
- - Dernière réponse : padsou
Messages postés
121
Date d'inscription
jeudi 24 janvier 2002
Dernière intervention
13 avril 2010
- 15 sept. 2005 à 10:45
bonjour à tous !



je cherche des fichiers dans un répertoire donné et je rempli un
tstringlist avec les noms de fichiers. Je souhaiterai trier ces
fichiers dans mon tstringlist par leur date de modification ou
création, bref du plus ancien au plus récent ! Merci d'avance
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Dernière intervention
9 janvier 2013
3
Merci
Te complique pas la vie pour cela et utilise la fonction ExtractFileName.


<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.

Merci cs_Delphiprog 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 cs_Delphiprog
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Dernière intervention
9 janvier 2013
1
Merci
Si le problème est toujours d'actualité, voici une proposition de solution commentée.

implementation

{$R *.dfm}
type
{Comme la structure TSearchrec n'est pas utilisable tel quel,
  on utilise une classe pour l'emballer}
  TSearchRecObj =   class (TObject)
    Sr: TSearchRec;
  end;

{Fonction de tri personnalis&#233; en fonction des dates des fichiers}
function SortList(List:TStringList;Index1,Index2:Integer):Integer;
var
  Obj1, Obj2: TSearchRecObj;
begin
{R&#233;cup&#233;rer les objets point&#233;s par la liste
  de chaines apr&#232;s transtypage}
  Obj1 : = TSearchRecObj(List.Objects[Index1]);
  Obj2 :=  TSearchRecObj(List.Objects[Index2]);
  {Comparaison "classique" en ordre croissant}
 if  Obj1.Sr.Time < Obj2.Sr.Time then
    Result : = -1
else
if Obj1.Sr.Time > Obj2.Sr.Time then
      Result :=  1
else
      Result := 0;
 end ;

procedure TForm1.Button1Click(Sender: TObject);
var
  Sr: TSearchRec;
  SrObj: TSearchRecObj;
  Sl: TStringList;
  i: integer;
begin
  Memo1.Clear;
  Sl : = TStringList.Create;
  try
if FindFirst('*.*', faAnyFile - faDirectory, Sr) =  0then
begin
repeat
{Cr&#233;er un wrapper de TSearchRec pour
        chaque fichier trouv&#233;}
        SrObj := TSearchRecObj.Create;
        SrObj.Sr := Sr;
        {Ajout &#224; la liste}
        Sl.AddObject(DateTimeToStr(FileDateToDateTime(Sr.Time))+ ' - ' + Sr.Name, SrObj);
       until  FindNext(Sr) <> 0;
      FindClose(Sr);
    end;
    {Tri de la liste de chaines}
    Sl.CustomSort(SortList);
    {Visualisation du r&#233;sultat}
    Memo1.Text : = Sl.Text;
  finally
{Destruction des objets point&#233;s par la liste}
for i :=  Sl.Count - 1 downto 0do
      Sl.Objects[i].Free;
    { Destruction de la liste de chaine }
    Sl.Free;
  end;
end;

Contr&#244;les n&#233;cessaires :
1 TButton
1 TMemo (pour contr&#244;ler le r&#233;sultat (pas utile en production)


<HR color =#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Commenter la réponse de cs_Delphiprog
Messages postés
121
Date d'inscription
jeudi 24 janvier 2002
Dernière intervention
13 avril 2010
0
Merci
ça marche impeccable merci mais désormais pour récuperer, uniquement le nom du fichier (parce que c'était un peu le but lol) je dois découper la chaine en fonction d'un caractère séparateur, non ?
Commenter la réponse de padsou
Messages postés
121
Date d'inscription
jeudi 24 janvier 2002
Dernière intervention
13 avril 2010
0
Merci
G.E.N.I.A.L. ! Merci infiniment !
Commenter la réponse de padsou

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.