mikrocontroller.net

Forum: PC-Programmierung Benachrichtigung bei Datei-Update


Autor: Günter R. (galileo14)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dafür sind folgende Win32-API-Funktionen da:

FindFirstChangeNotification
FindNextChangeNotification
FindCloseChangeNotification

Autor: Günter R. (galileo14)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Günter R. (galileo14)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.