![]() |
Verzeichnis überwachen & Dateiänderungsdatum prüfen
Moin zusammen,
ich hänge grade bei einem totalen Knoten im Hirn, hoffe ihr könnt mir helfen. Ich möchte in einem Verzeichnis so lange prüfen, ob eine neue Datei erstellt wurde und wenn er sie gefunden hat, diese als Ergebnis liefern (Dateinamen). Danach soll er prüfen ob die Datei verändert wurde (ist sie länger als 30sek. nicht verändert worden, soll sie kopiert werden). Ich hatte dabei erst an den Timer gedacht, der alle 5 Sekunden prüft ob es eine gibt, jedoch ist dies wie ich bisher feststellte unschön. Habt ihr dabei eine Idee, bin schon vieles durch gegangen an Tipps etc aus dem Internet aber spätestens beim Datum scheitert es, da ich dabei bisher immer ein falsches Datum & Uhrzeit erhalten habe.
Code:
procedure TTools.NewLog(Path : string); //Wird alle 5sek vom Timer ausgelöst - aTime ist nur global deklariert, um sie ausgeben zu können
var Date1, Date2, Date3: TDateTime; Datei : string; begin if (Split(GetLastModifiedFileName(Path), '2', 0) = 'Log') or (Split(GetLastModifiedFileName(Path), '2', 0) = 'log') then begin Datei := GetLastModifiedFileName(Path); showmessage(Datei); showmessage(Datetimetostr(atime)); end; end; function TTools.GetLastModifiedFileName(AFolder: String; APattern: String = '*.txt'): String; var sr: TSearchRec; begin Result := ''; aTime := 0; if FindFirst(IncludeTrailingPathDelimiter(AFolder) + APattern, faAnyFile, sr) = 0 then begin repeat if sr.Time > aTime then begin aTime := sr.Time; Result := sr.Name; end; until FindNext(sr) <> 0; FindClose(sr); end; end; |
AW: Verzeichnis überwachen & Dateiänderungsdatum prüfen
Ich habe einen Hinweis zu Windows-Freigaben auf Netzlaufwerken. Seit dem SMB2-Protokoll werden die dortigen Dateien gecashed, so dass Du nur alle paar Minuten neue Dateien oder geänderte Dateiattribute mitbekommst.
Und was die Datei- und Verzeichnisüberwachung angeht, schau Dir unbedingt folgenden Thread oder auch andere dazu an: ![]() |
AW: Verzeichnis überwachen & Dateiänderungsdatum prüfen
Liste der Anhänge anzeigen (Anzahl: 1)
Vielleicht hilft dir diese Unit ja.
Eine quelle kann ich keine mehr nennen, da ich bei Google nur zwei seltsame Ergebnisse finde. Jedoch ist die Unit von Iztok Kacin, Cromis (iztok.kacin@gmail.com). ( ![]() |
AW: Verzeichnis überwachen & Dateiänderungsdatum prüfen
Erstmal schon mal danke für die Ratschläge.
Bei der Unit steige ich aber aktuell nicht durch. :cry: |
AW: Verzeichnis überwachen & Dateiänderungsdatum prüfen
|
AW: Verzeichnis überwachen & Dateiänderungsdatum prüfen
Zitat:
Ich erstelle später mal eine Demo. Eine ganz normale Anwendung erstellen mit einem Button drauf.
Delphi-Quellcode:
unit Unit1;
interface uses //... DirectoryWatch; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private Watch: TDirectoryWatch; procedure OnNotify(const Sender: TObject; const Action: TWatchAction; const FileName: string); public end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.OnNotify(const Sender: TObject; const Action: TWatchAction; const FileName: string); begin ShowMessage('Action: ' + TRttiEnumerationType.GetName(Action) + sLineBreak + sLineBreak + 'FileName:' + sLineBreak + FileName); end; procedure TForm1.Button1Click(Sender: TObject); var Path: string; begin Path := ExtractFilePath(Application.ExeName) + '~TestVerzeichnis'; if ForceDirectories(Path) then begin Watch := TDirectoryWatch.Create; Watch.WatchOptions := [woFileName, woDirName, woAttributes, woSize, woLastWrite, woLastAccess, woCreation, woSecurity]; // hier am besten selber herausfinden was du brauchst Watch.WatchActions := [waAdded, waRemoved, waModified, waRenamedOld, waRenamedNew]; // hier genau so Watch.Directory := Path; Watch.OnNotify := OnNotify; Watch.Start; end else MessageDlg('Verzeichnis konnte nicht erstellt werden', TMsgDlgType.mtError, [mbOK], 0); end; end. |
AW: Verzeichnis überwachen & Dateiänderungsdatum prüfen
Ein guter Mann hier aus dem Forum hat da auch mal was verbrochen:
![]() |
AW: Verzeichnis überwachen & Dateiänderungsdatum prüfen
Diese units kannte ich gar nicht.
Achtet die auch auf Änderungen der Dateigröße und sowas? Die von mir genannte hat den Vorteil... es ist nur eine einzige Unit. |
AW: Verzeichnis überwachen & Dateiänderungsdatum prüfen
|
AW: Verzeichnis überwachen & Dateiänderungsdatum prüfen
Danke schon mal, das sieht verständlicher aus.
@Günni, bei deinem Beispiel meckert er bei mir, das er die Unit "DirectoryWatch" nicht findet (irgendwie logisch, da ich sie ja nirgends habe) aber in deinem Beispiel soll sie ja in die uses(?). Die Verweise auf die mega Codezeilen wie sie nun auch von Codezwerg gepostet wurde hilft mir leider nicht, da ich dort echt nicht durchsteige wie ich die Überwachung "aufrufe/starte" (beendet werden soll sie ja wenn er eine Datei findet, die erstellt wurde). Sry evtl. fehlt mir hier einfach das Verständnis. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:39 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