Thema: Delphi Neuste Datei suchen ?!?

Einzelnen Beitrag anzeigen

Benutzerbild von St.Pauli
St.Pauli

Registriert seit: 26. Dez 2004
351 Beiträge
 
Delphi 7 Personal
 
#6

Re: Neuste Datei suchen ?!?

  Alt 6. Jun 2005, 13:44
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
Gruß St.Pauli
  Mit Zitat antworten Zitat