AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Verzeichnis überwachen - ReadDirectoryChangesW
Thema durchsuchen
Ansicht
Themen-Optionen

Verzeichnis überwachen - ReadDirectoryChangesW

Ein Thema von Cyberaxx · begonnen am 7. Mär 2013 · letzter Beitrag vom 10. Mär 2013
Antwort Antwort
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#1

Verzeichnis überwachen - ReadDirectoryChangesW

  Alt 7. Mär 2013, 11:47
Hallo Community,

ich würde gerne ein Verzeichnis überwachen mittels ReadDirectoryChangesW. Habe hier auch schon einiges gefunden und zuletzt auch eine fertige Unit von Luckie & Christian. Es handelt sich um die Unit MpuReadDirectoryChangesCls.

Habe ein kleines Projekt erstellt welches mit ein Latex Verzeichnis überwachen soll. Inhalt 117 Dateien, wird nun eine Datei geändert läuft das Programm auch soweit Problemlos durch. Erzeuge ich nun allerdings meine PDF Datei, so wird ein Großteil der Dateien geändert. Es wird mir auch anfangs angezeigt bis es sich dann mit einer Zugriffsverletzung verabschiedet.

Natürlich jetzt wenn ich die Fehlermeldung brauche, dann läuft es einmal brav durch...
Nach dem driten durchgang aber kommt auch schon die nette Fehlermeldung.
Zitat:
Im Projekt Project2.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 00404401 in Modul 'Project2.exe'. Lesen von Adresse 02E211F6' aufgetreten.
Trotz fortsetzen bleibt die Form verschwunden. Zusätzlich darf ich den Thread auch nicht beenden. dann bekomme ich schon die nächste Meldung. Ich rufe hier nur csDirThread.Terminate auf
Zitat:
Exception EExternalException in Modul Project2.exe bei 772002F7.
Externe Exception C0000008.
Gerne erhalte ich auch mal unschöne Auswertungen von Filename und Reason. Diese kommen aber auch nicht immer.

Zitat:
[07.03.2013 12:36:05]: Datei wurde verändert -> tengenerator HL\hMODELL.log
[07.03.2013 12:36:05]: Ungültiger Reason Code: 00000000 -> tengenerator HL\hMODELL.texॣ
[07.03.2013 12:36:05]: Datei wurde verändert -> tengenerator HL\hMODELL.texॣ
[07.03.2013 12:36:05]: Datei wurde verändert -> tengenerator HL\hMODELL.tex
[07.03.2013 12:36:04]: Datei wurde verändert -> tengenerator HL
[07.03.2013 12:36:04]: Ungültiger Reason Code: 00000000 -> tengenerator HL\hMODELL.synctex.gz(busy)
[07.03.2013 12:36:04]: Datei wurde verändert -> tengenerator HL\hMODELL.synctex.gz(busy)
[07.03.2013 12:36:04]: Datei wurde verändert -> tengenerator HL\hMODELL.pdf
[07.03.2013 12:36:04]: Datei wurde verändert -> tengenerator HL
[07.03.2013 12:36:04]: Datei wurde verändert -> tengenerator HL
[07.03.2013 12:36:04]: Datei wurde verändert -> tengenerator HL\hMODELL.log
[07.03.2013 12:36:04]: Ungültiger Reason Code: 00000000 -> tengenerator HL\hMODELL.texÿ
[07.03.2013 12:36:04]: Datei wurde verändert -> tengenerator HL\hMODELL.texÿ
[07.03.2013 12:36:04]: Datei wurde verändert -> tengenerator HL\hMODELL.tex
[07.03.2013 12:36:02]: Datei wurde verändert -> tengenerator HL
[07.03.2013 12:36:02]: Ungültiger Reason Code: 00000000 -> tengenerator HL\hMODELL.synctex.gz(busy)
[07.03.2013 12:36:02]: Datei wurde verändert -> tengenerator HL\hMODELL.synctex.gz(busy)
[07.03.2013 12:36:02]: Datei wurde verändert -> tengenerator HL\hMODELL.pdf
[07.03.2013 12:36:01]: Datei wurde verändert -> tengenerator HL
[07.03.2013 12:36:01]: Datei wurde verändert -> tengenerator HL
[07.03.2013 12:36:01]: Datei wurde verändert -> tengenerator HL\hMODELL.log
[07.03.2013 12:36:01]: Ungültiger Reason Code: 00000000 -> tengenerator HL\hMODELL.tex
[07.03.2013 12:36:01]: Datei wurde verändert -> tengenerator HL\hMODELL.tex
[07.03.2013 12:36:01]: Datei wurde verändert -> tengenerator HL\hMODELL.tex
[07.03.2013 12:35:58]: Datei wurde verändert -> tengenerator HL
[07.03.2013 12:35:58]: Ungültiger Reason Code: 00000000 -> tengenerator HL\hMODELL.synctex.gz(busy)
Jetzt muss ich noch feststellen das hier Teile des Pfades bereits fehlen. es Sollte heißen Variantengenerator HL.

Gestartet wird es folgendermaßen:
Delphi-Quellcode:
  sMemo1.Lines.Clear;
  if DirectoryExists(sEdit1.Text) then
  begin
    if csDirThread = nil then
    begin
      WriteLog('Überwachung startet...');
      csDirThread := TcsDirThread.Create(sEdit1.Text);
      csDirThread.OnDirectoryChanges := csDirThreadDirectoryChanges;
      csDirThread.OnDirectoryChangesError := csDirThreadDirectoryChangesError;
      csDirThread.OnTerminate := csDirThreadTerminate;
    end
    else
      WriteLog('Thread existiert noch');
  end
  else
    WriteLog('Verzeichnis existiert nicht');
Stoppen so:
Delphi-Quellcode:
  if csDirThread <> nil then
  begin
    csDirThread.Terminate;
    //FreeAndNil(csDirThread);
  end;
Delphi 2010 Pro
Windows 7 64Bit
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#2

AW: Verzeichnis überwachen - ReadDirectoryChangesW

  Alt 8. Mär 2013, 14:03
Hier mal der Quelltext den ich derzeit einsetze. Die Klasse von Luckie & Christian ist enthalten. Ansonsten nur jvSelectDirectory, Rest ist Standard.

Sorry hier hat sich ein kleiner Fehler eingeschlichen in der Unit3.pas Zeile 73 muss das s von sedit entfernt werden
Angehängte Dateien
Dateityp: zip DirWatchDemo.zip (6,4 KB, 142x aufgerufen)
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!

Geändert von Cyberaxx ( 8. Mär 2013 um 15:05 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

AW: Verzeichnis überwachen - ReadDirectoryChangesW

  Alt 9. Mär 2013, 00:25
http://michael-puff.de/Programmierung/Delphi/Units/
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
doctor-x

Registriert seit: 29. Apr 2007
41 Beiträge
 
#4

AW: Verzeichnis überwachen - ReadDirectoryChangesW

  Alt 9. Mär 2013, 08:39
Hi,

e.v. mal mit http://www.delphipraxis.net/165565-t...rychanges.html versuchen.

Hatte mit ReadDirectoryChanges auch mal etliche komische Verhaltensweisen.

MfG
Wolf
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#5

AW: Verzeichnis überwachen - ReadDirectoryChangesW

  Alt 9. Mär 2013, 08:59
@Luckie: Das ist doch genau die Dateiversion die ich aktuell nutze und mit der es nicht funktioniert.

@doctor-x: Danke werd ich mir gleich mal ansehen
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: Verzeichnis überwachen - ReadDirectoryChangesW

  Alt 9. Mär 2013, 10:04
Ach das ist mein Demo? Ok. Dann könnte es daran liegen, dass ich das damals noch mit einer älteren Delphi Version geschrieben habe. Ich hatte damit keine Probleme.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#7

AW: Verzeichnis überwachen - ReadDirectoryChangesW

  Alt 9. Mär 2013, 10:22
Steht im übrigen im Eröffnungspost

Ich hab es selbst auf Delphi 7 kompiliert unter WinXP gestern Abend aber da knallt es schon direkt bei der ersten Änderung im Verzeichnis.
Habe da sonst kein Kram dran gebaut es ist nur das starten des Threads.
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#8

AW: Verzeichnis überwachen - ReadDirectoryChangesW

  Alt 9. Mär 2013, 20:07
Danke doctor-x die Komponente erzeugt zumindest keine Fehler bisher.

Bei einer Dateiänderung wird jedoch das Event "Modified" 2 mal aufgerufen. Konnte ich bei Lukies Klasse nicht feststellen.


Es geht darum das ich gerne ein Programm hätte was wie Dropbox funktioniert. Ich dachte das ich dies mit Hilfe dieser Funktion aufbauen kann.
Wenn allerdings bei einem erzeugen einer Datei 5 mal das Event aufgerufen wird denke ich wirds doch schwer diese direkt hochzuladen.

Weiß jemand wie die Dropbox das beispielsweise löst?
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Verzeichnis überwachen - ReadDirectoryChangesW

  Alt 10. Mär 2013, 00:02
Moin Daniel,

Bei einer Dateiänderung wird jedoch das Event "Modified" 2 mal aufgerufen. Konnte ich bei Lukies Klasse nicht feststellen.
Das doppelte Auslösen des Events scheint ein prinzipielles Verhalten von ReadDirectoryChangesW zu sein, dass wir hier im Forum schon öfter diskutiert haben (leider ohne Lösung )
Ich vermute mal, dass Luckie dafür einen Workaround eingebaut hat.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


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:53 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