Zitat von
lorrey:
Das wäre ja echt ärgerlich !
Zumal müsste ich dann einen Loop über eventuell mehr als 1000 Dateien machen
Das kann es ja eigentlich nicht sein ...
kann man nicht irgendwie vielleicht die Funktion vom Explorer nutzen und nach Datum/Zeit sortieren ?
Dann bräuchte man nur über Taggleiche Dateien loopen ... ?!?
Oder so ...
Wieso?
Delphi-Quellcode:
procedure GetFilesInDirectory(Directory: String; const Mask: String;
List: TStrings;
WithSubDirs, ClearList: Boolean);
procedure ScanDir(const Directory: String);
var
SR: TSearchRec;
begin
if FindFirst(Directory + Mask, faAnyFile - faDirectory, SR) = 0 then try
repeat
List.Add(Directory + SR.Name) // <- Hier den Vergleich einbauen und List.Add einfach entfernen...
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
if WithSubDirs then begin
if FindFirst(Directory + '*.*', faAnyFile, SR) = 0 then try
repeat
if (SR.Attr = faDirectory) and
(SR.Name <> '.') and (SR.Name <> '..') then
ScanDir(Directory + SR.Name + '\');
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
end;
end;
begin
List.BeginUpdate;
try
if ClearList then
List.Clear;
if Directory = '' then Exit;
if Directory[Length(Directory)] <> '\' then
Directory := Directory + '\';
ScanDir(Directory);
finally
List.EndUpdate;
end;
end;
function GetCreationTimeOfFile(const AFileName: String;): TDateTime;
var
SR: TSearchRec;
SystemTime: TSystemTime;
NewCreationTime: TFileTime;
begin
Result:=0;
if FindFirst(AFileName, faAnyFile, SR)=0 then
try
IF (Windows.FileTimeToLocalFiletime(SR.FindData.ftCreationTime, NewCreationTime) and
Windows.FileTimeToSystemTime(NewCreationTime, SystemTime)) Then
Result:=Encodedate(SystemTime.wYear,
SystemTime.wMonth,
SystemTime.wDay) +
Encodetime(SystemTime.wHour,
SystemTime.wMinute,
SystemTime.wSecond,
SystemTime.wMilliseconds);
finally
SysUtils.FindClose(SR)
end;
end;
Bau hier gleich in der Suche ein, dass das du ein Datum z.B. als String speicherst, dass du dann immer mit der Aktuellen Datei vergleichst...
Wenn Altes neuer ist als Aktuelles, dann Altes = Aktuelles, ansonsten Altes = Altes...
Natürlich musst du auch den Namen der neusten Datei speicher. Das wäre schon alles. Nach einem *.* Durchlauf hättest du immer die neuste Datei, ohne auch nur eine Schleife zu brauche.
Wenn ich Fehler gemacht habe, mich bitte drauf hinweisen