AGB  ·  Datenschutz  ·  Impressum  







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

Verzeichnis überwachen - ReadDirectoryChangesW

Ein Thema von Cyberaxx · begonnen am 7. Mär 2013 · letzter Beitrag vom 10. Mär 2013
 
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
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 06:05 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