Verzeichnisse überwachen: Der File-System-Watcher spart Zeit

(http://www.zdnet.de/magazin/39201881/verzeichnisse-ueberwachen-der-file-system-watcher-spart-zeit.htm)

von Zach Smith, 10. März 2009

Sobald Dateien oder Verzeichnisse erstellt oder verändert werden, müssen Systeme gewisse Aufgaben ausführen, zum Beispiel eine Datei parsen und in die Datenbank eintragen. ZDNet demonstriert, wie der File-System-Watcher dies vereinfacht.

Um Änderungen in einem Dateisystem zu überwachen, bietet sich der File-System-Watcher an. Warum? Weil er pro Überwachter Datei mindestens zehn Sekunden einspart. Ein Importsystem, das Daten aus Textdateien in eine Datenbank übernimmt, ist ein gutes Beispiel, um die Arbeit mit dem File-System-Watcher zu erklären, denn ein solches Programm sollte Verzeichnisse stets auf neu erstellte Dateien hin überprüfen. Sobald eine Datei erstellt wurde, muss das Programm diese Datei öffnen, sie parsen und dann die Daten in die Datenbank einfügen. Häufig geschieht das, indem eine Verzeichnisabfrage durchgeführt wird. Dadurch werden alle neuen Dateien aufgezählt, die seit der letzten Abfrage hinzugekommen sind. Das .NET Framework bietet Entwicklern eine Alternative zu dieser ständigen Systemabfrage: das FileSystemWatcher-Objekt.

Das FileSystemWatcher-Objekt übernimmt die Überwachung eines Verzeichnisses. Sobald eine Datei erstellt, aktualisiert oder gelöscht wird, gibt der File-System-Watcher eine Meldung heraus, um den Anwender über eine Veränderung zu informieren. Damit weiß das Programm nahezu sofort nach einer Dateierstellung, dass eine neue Datei zur Verfügung steht. Dank umgehender Benachrichtigung kann das System weitaus effizienter arbeiten. Denn das Verzeichnis muss nicht ständig auf Änderungen hin abgefragt werden. Damit geht zwischen den einzelnen Verzeichnisabfragen keine Zeit verloren.

Grundlagen des File-System-Watcher

Es gibt ein paar grundsätzliche Eigenschaften und Ereignisse, die vor einer Arbeit mit dem File-System-Watcher bekannt sein sollten. Zweifellos ist die wichtigste Eigenschaft des Objekts EnableRaisingEvents. Dieses Merkmal legt fest, ob das Objekt beim Erhalt einer Änderungsmeldung ein Ereignis auslöst. Steht die Eigenschaft EnableRaisingEvents auf "false", bewirkt das Objekt keine Änderungsereignisse. Bei "true" werden hingegen Ereignisse ausgelöst. Es folgt eine Liste weiterer wichtiger Eigenschaften und Ereignisse, die im Umgang mit dem File-System-Watcher bekannt sein sollten:

Eigenschaften

Ereignisse

Hinweis: Keines dieser Ereignisse wird ausgelöst, wenn die Eigenschaft EnableRaisingEvents nicht auf "true" steht. Sollte der File-System-Watcher irgendwann einmal nicht richtig funktionieren, gilt es also, zuerst die EnableRaisingEvents-Eigenschaft zu überprüfen, um sicherzustellen, dass sie durch "true" aktiviert ist. Sobald ein Event-Handler vom File-System-Watcher aufgerufen wird, sind stets zwei Argumente enthalten: ein Objekt mit der Bezeichnung "sender" sowie ein FileSystemEventArgs-Objekt namens "e". Letzteres ist für das hier angewandte Szenario das wichtigere von beiden. Denn dieses Objekt gibt darüber Auskunft, was für das Auslösen des Ereignisses verantwortlich war. Folgende Informationen lassen sich dem FileSystemEventArgs-Objekt entnehmen:

Eigenschaften

Beispielcode

Der nachstehende Code zeigt anschaulich, wie sich der File-System-Watcher verwenden lässt. In diesem Beispiel wird das Verzeichnis "C:\\Temp" auf neu erstellte *.TXT-Dateien hin überwacht. Das ist wahrscheinlich die einfachste Anwendung für den File-System-Watcher.

Einsatzmöglichkeiten

Wo der File-System-Watcher sinnvoll einsetzbar ist, erschließt sich einem vielleicht nicht auf den ersten Blick. Er liefert Meldungen, wenn eine Datei oder ein Verzeichnis geändert wurden. Doch wann wird eine solche Information benötigt?

Ein mögliches Beispiel wäre ein System, bei dem Kunden Dateien zur weiteren Verarbeitung hochladen können. Auch 2009, im Zeitalter von Web-Services und SOA, ist es bei vielen Systemen nach wie vor so, dass sie reine Textdateien erhalten, die dann an bestimmten Orten gespeichert werden. Dabei spielt es keine Rolle, ob es sich bei diesem Speicherort um einen FTP-Server oder um einen Teil eines Netzwerks handelt. Wer den File-System-Watcher in einem solchen System einmal ausprobiert hat, wird zwar feststellen, dass es auch hier noch Verbesserungsmöglichkeiten gibt, doch er stellt eine deutliche Verbesserung gegenüber einem permanenten Abfragen der Verzeichnisse dar.

Außerdem eignet sich der File-System-Watcher für den Fall, dass zwei Dateien jederzeit absolut identisch sein sollen. Er könnte dann beide Dateien überwachen und ein Ereignis auslösen, sobald eine aktualisiert wird. Dann müssten nur noch die Änderungen in das andere System beziehungsweise die andere Datei kopiert werden.

Wer sein System für etwas verwendet, bei dem Dateien oder Verzeichnisse laufend überwacht sein müssen, der sollte sich dieses Tool einmal genauer ansehen. Denn bei einer Zeiteinsparung von mindestens zehn Sekunden pro überwachter Datei ist der File-System-Watcher ganz klar eine große Bereicherung.