AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Verzeichnis überwachen & Dateiänderungsdatum prüfen
Thema durchsuchen
Ansicht
Themen-Optionen

Verzeichnis überwachen & Dateiänderungsdatum prüfen

Ein Thema von Moombas · begonnen am 12. Apr 2018 · letzter Beitrag vom 1. Feb 2021
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#1

Verzeichnis überwachen & Dateiänderungsdatum prüfen

  Alt 12. Apr 2018, 12:57
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;
  Mit Zitat antworten Zitat
rwalper

Registriert seit: 6. Sep 2006
48 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Verzeichnis überwachen & Dateiänderungsdatum prüfen

  Alt 12. Apr 2018, 13:16
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:
https://www.delphipraxis.net/194309-...yregister.html
  Mit Zitat antworten Zitat
günni0
(Gast)

n/a Beiträge
 
#3

AW: Verzeichnis überwachen & Dateiänderungsdatum prüfen

  Alt 12. Apr 2018, 13:21
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).

( Google-Suche )
Angehängte Dateien
Dateityp: pas DirectoryWatch.pas (15,8 KB, 79x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Verzeichnis überwachen & Dateiänderungsdatum prüfen

  Alt 12. Apr 2018, 14:00
Erstmal schon mal danke für die Ratschläge.

Bei der Unit steige ich aber aktuell nicht durch.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.035 Beiträge
 
Delphi 12 Athens
 
#5

AW: Verzeichnis überwachen & Dateiänderungsdatum prüfen

  Alt 12. Apr 2018, 14:22
Hier im Forum suchenReadDirectoryChangesW
Hier im Forum suchenFindFirstChangeNotification

MSDN-Library durchsuchenReadDirectoryChangesW
MSDN-Library durchsuchenFindFirstChangeNotification
MSDN-Library durchsuchenSHChangeNotifyRegister
...

https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
günni0
(Gast)

n/a Beiträge
 
#6

AW: Verzeichnis überwachen & Dateiänderungsdatum prüfen

  Alt 12. Apr 2018, 14:25
Erstmal schon mal danke für die Ratschläge.

Bei der Unit steige ich aber aktuell nicht durch.
Du musst eine Instanz davon erstellen und dann im OnNotify-Event abfragen was passiert.

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.

Geändert von günni0 (12. Apr 2018 um 14:59 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.156 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Verzeichnis überwachen & Dateiänderungsdatum prüfen

  Alt 12. Apr 2018, 14:59
Ein guter Mann hier aus dem Forum hat da auch mal was verbrochen:

https://github.com/Wosi/DirectoryWatcher
  Mit Zitat antworten Zitat
günni0
(Gast)

n/a Beiträge
 
#8

AW: Verzeichnis überwachen & Dateiänderungsdatum prüfen

  Alt 12. Apr 2018, 15:01
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.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Verzeichnis überwachen & Dateiänderungsdatum prüfen

  Alt 12. Apr 2018, 15:15
DirectoryWatch Quelle
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Verzeichnis überwachen & Dateiänderungsdatum prüfen

  Alt 12. Apr 2018, 15:17
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.

Geändert von Moombas (12. Apr 2018 um 15:20 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:35 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