![]() |
Neuste Datei suchen ?!?
Hallo !
Kurze Frage: Wie kann ich am einfachsten die neuste(n) Datei(en) in einem Verzeichnis im Vergleich zu einem definierten DateTime Wert finden ?!? Geht das ohne das ich mit "FindNext" alles durchlaufen muss ?!? Danke und Gruss |
Re: Neuste Datei suchen ?!?
Denke mal nicht das du da herum kommst... Windows stellt nunmal nur FindFirst und FindNext zur verfügung...
Greetz Boombuler |
Re: Neuste Datei suchen ?!?
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 ... |
Re: Neuste Datei suchen ?!?
Zitat:
Zitat:
Zitat:
Code dafür gibt es übrigens in der Code-Lib. |
Re: Neuste Datei suchen ?!?
Mal ganz logisch hinterfragt: Wie willst du die neuste Datei nehmen, wenn du keine Liste aller Dateien hast? Zu diesem Zeitpunkt weist du ja noch garnicht ob überhaupt so eine Datei existiert...
|
Re: Neuste Datei suchen ?!?
Zitat:
Wieso?
Delphi-Quellcode:
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...
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; 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 :angel2: |
Re: Neuste Datei suchen ?!?
wenn dein programm live läuft bzw permanent läuft kannst du die neuen dateien mit den dateisystemevents fangen.
|
Re: Neuste Datei suchen ?!?
Echt ?
Kann man die Events von nur einem Verzeichnis triggern ?!? Ansonsten macht diese Variante kein Sinn, wenn ich bei jeder neuen Datei ein Message bekomme... Der Vorschlag von "St.Pauli" sieht eigentlich gut aus und ich denke viel anders wird es leider net gehen. |
Re: Neuste Datei suchen ?!?
dann ist es eventuell das
![]() |
Re: Neuste Datei suchen ?!?
Super!
"FindFirstChangeNotification" sieht sehr gut aus - ich denke damit kann man was anfangen...! Vielen Dank an alle die geholfen haben :-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz