Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi zuletzt geänderte Datei finden (https://www.delphipraxis.net/103156-zuletzt-geaenderte-datei-finden.html)

Tim Henford 11. Nov 2007 14:32


zuletzt geänderte Datei finden
 
Hallo,

also, ich habe einenn Odner mit Dateien die in etwa alle so heißen:
abc_14_12_2006 16_20_16.txt
abc_14_12_2006 13_22_18.txt
abc_10_07_2006 12_20_16.txt
...

Nun möchte ich aus diesen Dateien möglichst schnell die finden, die die neuste ist.

Muss ich da jede mit jeder vergeleichen oder gibt es da eine schnellere Variante? Der Explorer kann die Dateien ja auch schön nach letzter Änderung sortieren, aber via Delphi??


Danke Tim

little_budda 11. Nov 2007 14:40

Re: zuletzt geänderte Datei finden
 
Hallo,

ich habe mal etwas ähnlichers gemacht.
Lesen der Dateien mir "findFirst" und "FindNext"
Danach habe ich die Dateiattribute gelesen "FileGetAttr" und nach Zeit sortiert.
Fertig.

Tim Henford 11. Nov 2007 14:43

Re: zuletzt geänderte Datei finden
 
So also folgende Funktion liefert mir erstmal alle Dateien eines Ordners, das klappt soweit...

Delphi-Quellcode:
function allFiles(Verzeichnis, Endung: string): TStringList;
var
  SR     : TSearchRec;
begin
  result:= TStringList.Create;
  if Verzeichnis[length(Verzeichnis)]<>'\' then
    Verzeichnis:=Verzeichnis+'\';
  if FindFirst(Verzeichnis+Endung,$3F,SR)=0 then begin
    repeat
      if (SR.Name<>'.') and (SR.Name<>'..') and (SR.Attr<>faDirectory) then
        result.Add(SR.Name);  
    until FindNext(SR)<>0;
    FindClose(SR);
  end;
end;

...aber wie nun nach Zeit sortieren?

DeddyH 11. Nov 2007 15:02

Re: zuletzt geänderte Datei finden
 
Wenn es nicht um Sortierung geht, sondern nur darum, herauszufinden, welche Datei zuletzt geändert wurde, kannst Du es mal hiermit versuchen (schnell getippselt, kann noch Fehler enthalten):
Delphi-Quellcode:
function FindLatestModified(sPath: string): string;
var Data: TWin32FindData;
    LastModified: TDateTime;
    sTime: TSystemTime;
    FindHandle: Cardinal;
begin
  LastModified := 0;
  Result := '';
  sPath := IncludeTrailingPathDelimiter(sPath);
  FindHandle := FindFirstFile(PChar(sPath + '*.*'),Data);
  if FindHandle <> INVALID_HANDLE_VALUE then
    begin
      repeat
        if ((Data.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0) then
          begin
            FileTimeToSystemTime(Data.ftLastWriteTime,sTime);
            if (SystemTimeToDateTime(sTime) > LastModified) then
              begin
                LastModified := SystemTimeToDateTime(sTime);
                Result := Data.cFileName;
              end;
          end;
      until not FindNextFile(FindHandle,Data);
      Windows.FindClose(FindHandle);
    end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz