Entwickler-Ecke

Dateizugriff - Änderungen am Dateisystem überwachen


mazias - Fr 03.01.03 21:25
Titel: Änderungen am Dateisystem überwachen
Hat jemand ne Idee wie ich folgende Änderungen im Dateisystem überwachen kann: Dateien/Ordner Gelöscht; Erstellt; Umbenannt.

Ich suche schon ziemlich lange nach einer Lösung für das Problem, hab aber noch nichts gefunden.
Ich hab's mit FindFirstChangeNotification probiert, aber das sagt mir nur das sich was geändert hat, aber nicht was.
Dann hab ich's mit so einer versteckten Shell-Funktion probiert, aber die zeigt nur Änderungen an, die der Benutzer im Explorer macht.
Als letztes hab ich mir den Source von FileMon runtergeladen, aber da seh ich nicht richtig durch. Außerdem zeigt das Programm vielleicht hundert Ereignisse an, wenn man nur mal ne Datei umbenennt.
Das letzte was mir im Moment noch einfällt ist die API-Funktion ReadDirectoryChangesW. Hab ich noch nicht ausprobiert, ich glaube aber das es recht ähnlich zu FindFirstChangeNotification ist, bin mir aber nicht sicher.

Also wenn jemand ne Idee hat, auch wenn's nur ne kleine ist, würde ich mich sehr Freuen.

Tschau
-Matze


Pierre - Sa 04.01.03 00:06

Hallo,
in den FAQs "Dateien" findest du das rekursiv Suchen nach Ordner und Dateien. Wenn Du dort beim Aufruf der Funktion "c:\" eingibst, dann
wird dir in einer listbox komplett C: aufgelistet. Dieses kannst Du speichern und nach Deinen Veränderungen wiederholen. So bekommst Du zwei Textfiles (vorher und nachher). Diese kannst Du dann in zwei arrays laden und vergleichen. In die o.g. Funktion kannst Du noch die Größe, die Eigenschaft usw. aufnehmen, dann findest Du noch mehr Veränderungen.
Gruß Pierre


mimi - Sa 04.01.03 18:31

Ist das nicht zu langsamm ?
Ich bin mir sicher das es Programm botschaften gibt die das programm an windows sendet. Wenn man diese Botschaften abfangen könnten würde man sicher schneller zum Ziel komme oder ?
aber die frage ist ja. Gibt es so eine botschaft wenn ja wie heißt sie ?

MFG
mimi


matze - Sa 04.01.03 19:42

das hab ich hier ( http://www.delphi-forum.de/viewtopic.php?t=5221&highlight= ) auch schon gefragt

Moderiert von user profile iconChristian S.: Link: AUQ -> DF


mimi - Sa 04.01.03 21:51

Das meine ich doch garnicht.
Ein Programm sendet doch nachrichten an windows oder nicht ?
und die nachrichten könnte man doch abfangen oder nicht ?

MFG
mimi


matze - Sa 04.01.03 22:15

ja stimmt.

aber wie macht das denn filemon ?? schickt denn windoof nicht ne msg raus, wenn irgendwas am dateisystem gemacht wird ??


mimi - Sa 04.01.03 22:25

daovn rede ich doch.
Filmon(oder wie das coole programm heißt) aber ich selbst. Und ich wollte es auch schonmal schreiben;)

ich vermute mal das es für alle befehle auf das Dateisystem eine eigene nachricht gibt.
das heißt: du musst herrausfinden welche nachrichte das sind.
und wie man sie unter Delphi abfangen kann.
und schon hast du dein Ziel erreicht ;)
ich wollte z.B funktionen einbauen die es dir erlauben nur bestimmte programm zu überwachen. Weil wenn du nur ein bestimtes Programm beobachten willst ist das mit Filemon zimlich schwer :cry:

MFG
mimi


mazias - So 05.01.03 04:38

also Filemon kriegt das über einen sys Treiber mit.
Das mit den Listboxen ist zu langsam, ich brauchs am besten in Echtzeit.
Windows schickt zwar ne Menge Messages, aber keine die das Dateisystem betreffen. Jedenfalls nicht automatisch, vielleicht muss man ja vorher nen Api-Befehl senden. Aber welchen?

...irgendwie muss es doch gehen...

tschö,
Matze


MathiasH - So 05.01.03 11:46

im Entwickler stand mal sowas wie das zu machen ist, kann aber sein, dass das Beispielprogi für C++ ist schau einfach mal im Archiv nach, müsste ungefähr die jan Ausgabe sein ich hab sie grad nicht zur hand...

MathiasH


matze - So 05.01.03 12:43

wenn eine lösung gefunden wird, wäre ich sehr glücklich, wenn ihr die hier schreibt oder ein tut oder so was draus macht !!!


MathiasH - So 05.01.03 20:00

hab mich getäuscht, war Toolbox 1/01 auf Seite 42/43 Artikel >>Big Brother<< für Verzeichnisse, ihr habt richtig geraten, es geht (wie auch anders) mit der Win-Api aber eins sag ich gleich, simpel iss es nicht :P

und: die funktion sagt nur, dass sich was geändert hat, aber leider nicht was, das muss man dann schon selber rausfinden....

MathiasH


matze - Di 28.01.03 18:45

also bei den ABFs kompos ( http://www.abfsoftware.com/products/abfComponents/index.html FolderMonitor) gibts ne kompo, die sagt dir, wenn eine Änderung in einem Ordner erfolgt ist. aber den Dateinamen bekommt man nicht zurück !!!
oder ich bin nur zu blöd dazu ;-)


mimi - Di 28.01.03 21:05

werde ich mal testen, weil ich suche auch noch einer möglichkeit;)