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

Signaler
Messages postés
121
Date d'inscription
jeudi 24 janvier 2002
Statut
Membre
Dernière intervention
13 avril 2010
-
Messages postés
121
Date d'inscription
jeudi 24 janvier 2002
Statut
Membre
Dernière intervention
13 avril 2010
-
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

4 réponses

Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
29
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.
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
29
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.
Messages postés
121
Date d'inscription
jeudi 24 janvier 2002
Statut
Membre
Dernière intervention
13 avril 2010

ç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 ?
Messages postés
121
Date d'inscription
jeudi 24 janvier 2002
Statut
Membre
Dernière intervention
13 avril 2010

G.E.N.I.A.L. ! Merci infiniment !