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
- Path bestimmt, welchen Pfad der File-System-Watcher überwachen soll. Der Eintrag "C:\\Temp\\" bedeutet, dass alle Veränderungen in diesem Verzeichnis beobachtet werden.
- IncludeSubDirectories zeigt an, ob der File-System-Watcher auch Unterverzeichnisse auf Änderungen hin überprüfen soll.
- Filter ermöglicht es, die Änderungen für gewisse Dateiarten zu filtern. Soll es beispielsweise nur eine Meldung geben, wenn TXT-Dateien verändert, erstellt, oder gelöscht werden, dann lautet der Eintrag "*.txt". Diese Eigenschaft ist sehr praktisch, wenn die Verzeichnisse sehr groß sind oder in den Verzeichnissen viel Datenverkehr anfällt.
Ereignisse
- Changed wird ausgelöst, sobald eine Datei in dem überprüften Verzeichnis verändert wird. Dazu ein wichtiger Hinweis: Dieses Ereignis kann auch mehrfach stattfinden, selbst wenn der Inhalt der Datei nur ein einziges Mal geändert wurde. Das liegt daran, dass sich andere Dateieigenschaften beim Speichern der Datei ändern.
- Created wird ausgeführt, sobald eine Datei in dem überprüften Verzeichnis erstellt wird. Wer dieses Ereignis nutzen will, um eine neu erstellte Datei zu verschieben, muss seinen Event-Handler so programmieren, dass es keine Schwierigkeiten gibt, falls die Datei zeitgleich von einem anderen Prozess verwendet wird. Das liegt daran, dass das Created-Ereignis ausgelöst werden kann, bevor der Prozess, der die Datei erstellt hat, diese freigegeben hat. Daher muss der Code im Vorfeld entsprechend angepasst werden.
- Deleted wird ausgelöst, sobald eine Datei in dem überprüften Verzeichnis gelöscht wird.
- Renamed wird aktiviert, wenn eine Datei in dem überprüften Verzeichnis umbenannt wird.
Eigenschaften
- Name zeigt den Namen der Datei an, die für das Auslösen des Ereignisses verantwortlich war. Sie gibt nicht den Pfad zur Datei an, sondern nur den Namen der maßgeblichen Datei beziehungsweise des Verzeichnisses.
- Bei ChangeType handelt es sich um einen Typ von WatcherChangeTypes. Er gibt an, welche Art von Ereignis ausgelöst wurde. Zu den gültigen Werten zählen:
- Changed (verändert)
- Created (erstellt)
- Deleted (gelöscht)
- Renamed (umbenannt)
- FullPath gibt den gesamten Pfad zur auslösenden Datei an. FullPath beinhaltet sowohl den Dateinamen als auch den Verzeichnisnamen.
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.