Hallo, wenn ich mit meinem Programmier-Editor eine Datei bearbeite und diese gleichzeitig mit einem anderen Editor öffne (z.B. WordPad) und ebenfalls ändere und dann speichere und danach wieder in meinen Programmier-Editor wechsle, bekomme ich dort eine Meldung, daß meine Datei von anderer Seite her geändert worden sei, und ich habe die Option, die neue Version von Platte zuladen (unter Verlust es eben schon Editierten). Insofern verhält sich der Programmier-Editor (GW-Edit) optimal (WordPad kümmert sich nicht um soetwas, wenn man's in umgekehrte Richtung macht). Hat jemand eine Idee, wie das bei mein Programmier-Editor programmiert worden sein könnte (außer der trivialen Lösung, beim Laden einer Datei deren Datei-Datum/Uhrzeit zu speichern und dies jedesmal zu prüfen, wenn das Editor-Fenster den Fokus erhält)? Gibt es Windows-Nachrichten für solche Datei-Veränderungen? Will ein Programm schreiben, das auf Veränderung einer Datei reagiert und dann ein Programm ausführt. Und möchte die naheliegende Methode, die zu überwachende Datei regelmäßig zu pollen und das Dateidatum anzufragen, nach Möglichkeit vermeiden. Danke für Eure Ideen. Günter
Dafür sind folgende Win32-API-Funktionen da: FindFirstChangeNotification FindNextChangeNotification FindCloseChangeNotification
Hallo, Rufus, danke! Kennst Du Dich mit diesen Funktionen aus? Wann reagieren sie? Angenommen, ich aktiviere eine solche Notification auf eine bestimmte Datei und kopiere dann eine sehr große andere Datei auf diese, sodaß die notifizierte sich ändert; das Kopieren mag z.B. 10 Sekunden dauern. Kommt dann die Notification schon beim Beginn des Kopierens oder erst bei dessen Ende (was wünschenswert wäre)? Günter
Die Events werden aufgrund von Änderungen im überwachten Verzeichnis ausgelöst; die Dokumentation von FindFirstChangeNotification beschreibt verschiedene Konstanten für einen Filter, mit dem Änderungen an Dateinamen, Verzeichnisnamen, Dateiattribute, -Größe, -Schreibdatum und Sicherheitseinstellungen ausgefiltert werden können. Du wirst in Dein Programm beim automatischen Datei-neu-laden die Rückgabewerte von CreateFile auswerten und sinnvoll darauf reagieren müssen, um Dateiblockaden (nicht abgeschlossener Kopiervorgang) zu erkennen und das Öffnen später erneut probieren. Die Änderungszeit einer Datei wird beim Start des Kopiervorganges auf die aktuelle Zeit und nach Abschluss des Kopiervorganges auf die Zeit der Quelldatei gesetzt; es könnte also sein, daß hierfür sogar zweimal das Event signalisiert wird. Wenn ich mich aber recht erinnere, werden diese Events eh mit einer gewissen Verzögerung (die durchaus im einstelligen Sekundenbereich liegen kann) generiert, so daß das Problem recht selten auftreten dürfte. Achja: Anbei ein Codebeispiel aus der MS-Dokumentation. Vielleicht hilft's ja.
Hallo, Rufus, danke für das Textfile; es erklärt die Sache gut. Ich habe jetzt mal einen anderen Ansatz verfolgt, der gut funktioniert (meine "triviale" Lösung): ich lese beim Start das File-Datum der zu überwachenden Datei und habe dann einen Timer aufgesetzt, der alle Sekunde (einstellbar) das File-Datum gegen den gespeicherten Wert prüft; bei Veränderung geht das Programm von einem neuen Datei-Inhalt aus und macht seine Arbeit (Einfügen einer Prüfsumme), speichert danach das jetzt aktuelle File-Datum und beginnt von vorn, bis ich abbreche. Das funktioniert einwandfrei; die Notification-Lösung ist sicher professioneller; gelegentlich werde ich sie testen (gebe dann hier Bescheid). Danke Dir. Günter
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.