Gewusst wie: Konfigurieren von Instanzen von FileSystemWatcher-Komponenten

Aktualisiert: November 2007

Sie müssen mehrere Eigenschaften für die Instanzen der FileSystemWatcher-Komponente festlegen, um ihr Verhalten zu steuern. Mit diesen Eigenschaften legen Sie fest, welche Verzeichnisse und Unterverzeichnisse von der Komponenteninstanz überwacht und durch welche Aktionen in diesen Verzeichnissen Ereignisse ausgelöst werden.

Festlegen der zu überwachenden Verzeichnisse

Sie verwenden zwei Eigenschaften, um zu bestimmen, welche Verzeichnisse die FileSystemWatcher-Komponente überwachen soll: Path und IncludeSubdirectories.

So legen Sie den vollqualifizierten Pfad des zu überwachenden Stammverzeichnisses fest

  • Sie können die Path-Eigenschaft für eine bestehende Komponenteninstanz angeben, wie im folgenden Code gezeigt:

    Dim MyWatcher As New System.IO.FileSystemWatcher()
    MyWatcher.Path = "c:\"
    
         System.IO.FileSystemWatcher MyWatcher = new System.IO.FileSystemWatcher();
            MyWatcher.Path = "c:\\";
    

    Das Verzeichnis kann im Standardformat (C:\Verzeichnis) oder im UNC-Format (\\Server\Verzeichnis) angegeben werden.

Mit der IncludeSubdirectories-Eigenschaft legen Sie fest, ob auch Unterverzeichnisse im Stammverzeichnis überwacht werden sollen. Wenn für die Eigenschaft true festgelegt ist, überwacht die Komponente in den Unterverzeichnissen dieselben Änderungen wie im Hauptverzeichnis.

Festlegen der zu überwachenden Änderungen

Sie können nicht nur die relevanten Verzeichnisse und Unterverzeichnisse angeben, sondern auch im Einzelnen festlegen, welche Dateien und welche Änderungen für Sie interessant sind. Zum Teil bestimmen Sie die zu überwachenden Änderungen, indem Sie Handler ausschließlich für die Ereignisse definieren, die für Sie von Interesse sind. Wenn Sie z. B. nur beim Erstellen von Dateien benachrichtigt werden möchten, behandeln Sie nur das Created-Ereignis. Sie können jedoch eine Reihe von Eigenschaften festlegen, die die Aktivitäten der Komponente noch weiter einschränken.

Mit der Filter-Eigenschaft können Sie eine bestimmte Datei oder einen Mustervergleich mit Platzhaltern angeben, um die Überwachung auf bestimmte Dateien oder Verzeichnisse im Stammverzeichnis einzuschränken. Wenn Sie z. B. das Erstellen von Textdateien im Stammverzeichnis überwachen möchten, können Sie für die Filter-Eigenschaft "*.txt" festlegen und dann einen Handler für das Created-Ereignis erstellen. Sie können den Filter auf jeden Wert festlegen, einschließlich aller gültigen Dateierweiterungen. Mit dem Standardwert "*.*" und der leeren Zeichenfolge " " werden alle Dateien oder Verzeichnisse zurückgegeben. Sie können jedoch immer nur eine Filterzeichenfolge festlegen. Bei Bedarf können Sie den Filter ändern, nachdem der FileSystemWatcher begonnen hat, Ereignisse zu empfangen.

Hinweis:

Mit der FileSystemWatcher-Komponente können Änderungen in einem Verzeichnis festgestellt werden, Änderungen an den Attributen des Verzeichnisses hingegen nicht. Bei einem Verzeichnis mit dem Namen c:\MeineProjekte überwacht die Komponente Änderungen in dem Verzeichnis, jedoch keine Änderungen, die am Verzeichnis selbst vorgenommen werden.

Mit der NotifyFilter-Eigenschaft schränken Sie die Änderungen, die Reaktionen nach sich ziehen, noch weiter ein. Mit der NotifyFilter-Eigenschaft legen Sie fest, ob Änderungen an Verzeichnisnamen, an Dateinamen oder beide Arten von Änderungen überwacht werden. Darüber hinaus enthält die NotifyFilter-Eigenschaft zahlreiche Werte, die das Changed-Ereignis einschränken. Das Changed-Ereignis kann sehr viele Ereignisse auslösen, da es bei jeder noch so geringen Änderung an der betreffenden Datei ein Ereignis auslöst. Manche Standardaktionen wie Kopieren und Verschieben von Dateien lösen sogar mehrere Änderungsereignisse aus, da sich verschiedene Attribute, wie Größe, letzte Bearbeitung und letzter Zugriff, ändern.

Mit der NotifyFilter-Eigenschaft schränken Sie die Anzahl der Datei- oder Verzeichnisänderungen ein, für die die Komponenteninstanz Ereignisse auslöst. Sie können die Komponente so einrichten, dass Ereignisse nur dann ausgelöst werden, wenn sich der Name einer Datei oder eines Verzeichnisses ändert, wenn sich die Attribute eines Elements im Hauptverzeichnis ändern, wenn sich die Dateigröße ändert, wenn sich die Uhrzeit der letzten Bearbeitung bzw. des letzten Zugriffs ändert, oder wenn sich die Sicherheitszugriffsrechte für eine Datei oder ein Verzeichnis ändern. All diese Werte sind Teil der NotifyFilters-Enumeration. Sie können mehrere zu überwachende Änderungen mithilfe eines BitOr-Operators (für Visual Basic) oder eines |-Operators (für Visual C#) festlegen, wie im folgenden Beispiel gezeigt wird.

Hinweis:

Sie müssen für die EnableRaisingEvents-Eigenschaft true festlegen, damit die FileSystemWatcher-Komponente mit der Überwachung von Änderungen beginnt.

So konfigurieren Sie eine Instanz der FileSystemWatcher-Komponente

  1. Erstellen Sie eine Instanz der FileSystemWatcher-Komponente. Weitere Informationen hierzu finden Sie unter Gewusst wie: Erstellen von Instanzen von FileSystemWatcher-Komponenten.

  2. Legen Sie die Path-Eigenschaft auf den vollqualifizierten Pfad des Stammverzeichnisses fest, das überwacht werden soll.

    Tipp:

    Sie können den Pfad als Standardpfad oder als UNC-Pfad angeben.

  3. Legen Sie die optionalen Eigenschaften für die Instanz fest.

    Szenario

    Eigenschaft

    Wert

    Überwachen von Änderungen des Namens einer bestimmten Datei bzw. eines bestimmten Verzeichnisses

    Filter

    Ein Platzhalter-Filterausdruck, der die Überwachungsaktivität der Instanz einschränkt

    Überwachen von Änderungen in einem Unterverzeichnis des Stammverzeichnisses

    IncludeSubdirectories

    true oder false

    So überwachen Sie nur bestimmte Änderungen an einer Datei oder einem Unterverzeichnis bei der Behandlung des Changed-, Renamed-, Deleted- oder Created-Ereignisses

    NotifyFilter

    Beliebiger verfügbarer Wert in der NotifyFilters-Enumeration

  4. Aktivieren Sie die Komponenteninstanz, indem Sie für die EnableRaisingEvents-Eigenschaft true festlegen.

    Angenommen, Sie möchten eine Instanz der FileSystemWatcher-Komponente erstellen, um zu überwachen, ob in einem Ablageverzeichnis mit der Bezeichnung "Berichte" neue TXT-Dateien erstellt werden. Außerdem möchten Sie Änderungen an bestehenden Berichten überwachen, die dynamisch ausgeführt werden, sobald sich Daten ändern. Sie richten die Komponente wie folgt ein:

    ' This needs to be declared in a place where it will not go out of scope.
    ' For example, it would be a class variable in a form class.
    Dim MyWatcher As New System.IO.FileSystemWatcher()
    ' This code would go in one of the initialization methods of the class.
    MyWatcher.Path = "c:\"
    ' Watch only for changes to *.txt files.
    MyWatcher.Filter = "*.txt"
    MyWatcher.IncludeSubdirectories = False
    ' Filter for Last Write changes.
    MyWatcher.NotifyFilter = System.IO.NotifyFilters.LastWrite
    ' Example of watching more than one type of change.
    MyWatcher.NotifyFilter = _
       System.IO.NotifyFilters.LastAccess Or System.IO.NotifyFilters.Size
    ' Enable the component to begin watching for changes.
    MyWatcher.EnableRaisingEvents = True
    
         // This needs to be declared in a place where it will not go out of scope.
            // For example, it would be a class variable in a form class.
            System.IO.FileSystemWatcher MyWatcher = new System.IO.FileSystemWatcher();
            // This code would go in one of the initialization methods of the class.
            MyWatcher.Path = "c:\\";
            // Watch only for changes to *.txt files.
            MyWatcher.Filter = "*.txt";
            MyWatcher.IncludeSubdirectories = false;
            // Enable the component to begin watching for changes.
            MyWatcher.EnableRaisingEvents = true;
            // Filter for Last Write changes.
            MyWatcher.NotifyFilter = System.IO.NotifyFilters.LastWrite;
            // Example of watching more than one type of change.
            MyWatcher.NotifyFilter =
               System.IO.NotifyFilters.LastWrite | System.IO.NotifyFilters.Size;
    

Siehe auch

Aufgaben

Gewusst wie: Erstellen von Instanzen von FileSystemWatcher-Komponenten

Konzepte

Einführung in die Überwachung von Dateisystemereignissen