Trier par date lors d'un findfirst/findnext

Résolu
padsou Messages postés 121 Date d'inscription jeudi 24 janvier 2002 Statut Membre Dernière intervention 13 avril 2010 - 13 sept. 2005 à 10:03
padsou Messages postés 121 Date d'inscription jeudi 24 janvier 2002 Statut Membre 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

4 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
15 sept. 2005 à 09:32
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.
3
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
14 sept. 2005 à 21:20
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.
1
padsou Messages postés 121 Date d'inscription jeudi 24 janvier 2002 Statut Membre Dernière intervention 13 avril 2010
15 sept. 2005 à 09:29
ç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 ?
0
padsou Messages postés 121 Date d'inscription jeudi 24 janvier 2002 Statut Membre Dernière intervention 13 avril 2010
15 sept. 2005 à 10:45
G.E.N.I.A.L. ! Merci infiniment !
0
Rejoignez-nous