System.IO.FileSystemWatcher-Klasse

Dieser Artikel enthält ergänzende Hinweise zur Referenzdokumentation für diese API.

Wird verwendet FileSystemWatcher , um auf Änderungen in einem angegebenen Verzeichnis zu achten. Sie können auf Änderungen in Dateien und Unterverzeichnissen des angegebenen Verzeichnisses achten. Sie können eine Komponente erstellen, um Dateien auf einem lokalen Computer, einem Netzlaufwerk oder einem Remotecomputer anzuzeigen.

Wenn Sie auf Änderungen in allen Dateien achten möchten, legen Sie die Filter Eigenschaft auf eine leere Zeichenfolge ("") fest, oder verwenden Sie wild Karte s ("*.*"). Um eine bestimmte Datei anzuzeigen, legen Sie die Filter Eigenschaft auf den Dateinamen fest. Wenn Sie beispielsweise auf Änderungen in der Datei MyDoc.txt achten möchten, legen Sie die Filter Eigenschaft auf "MyDoc.txt" fest. Sie können auch auf Änderungen in einem bestimmten Dateityp achten. Wenn Sie beispielsweise auf Änderungen in Textdateien achten möchten, legen Sie die Filter Eigenschaft auf "*.txt" fest.

Es gibt mehrere Arten von Änderungen, auf die Sie in einem Verzeichnis oder einer Datei achten können. Sie können z. B. nach Änderungen in Attributes, Datum LastWrite und Uhrzeit oder dateien Size oder Verzeichnissen suchen. Dazu legen Sie die NotifyFilter Eigenschaft auf einen der NotifyFilters Werte fest. Weitere Informationen zur Art der Änderungen, die Sie ansehen können, finden Sie unter NotifyFilters.

Sie können auf das Umbenennen, Löschen oder Erstellen von Dateien oder Verzeichnissen achten. Wenn Sie beispielsweise die Umbenennung von Textdateien überwachen möchten, legen Sie die Filter Eigenschaft auf "*.txt" fest, und rufen Sie die WaitForChanged Methode mit einem Renamed angegebenen Parameter auf.

Das Windows-Betriebssystem benachrichtigt Die Komponente der Dateiänderungen in einem puffer, der von der FileSystemWatcher. Wenn es in kurzer Zeit viele Änderungen gibt, kann der Puffer überlaufen. Dies führt dazu, dass die Komponente die Nachverfolgung von Änderungen im Verzeichnis verliert und nur eine Deckenbenachrichtigung bereitstellt. Das Erhöhen der Größe des Puffers mit der InternalBufferSize Eigenschaft ist teuer, da sie aus nicht ausgelagerten Arbeitsspeicher stammt, der nicht auf den Datenträger getauscht werden kann, sodass der Puffer so klein wie groß genug ist, um keine Dateiänderungsereignisse zu verpassen. Um einen Pufferüberlauf zu vermeiden, verwenden Sie die und IncludeSubdirectories die NotifyFilter Eigenschaften, damit Sie unerwünschte Änderungsbenachrichtigungen herausfiltern können.

Eine Liste der anfänglichen Eigenschaftswerte für eine Instanz von FileSystemWatcher, finden Sie im FileSystemWatcher Konstruktor.

Überlegungen bei der Verwendung der FileSystemWatcher Klasse:

  • Ausgeblendete Dateien werden nicht ignoriert.
  • In einigen Systemen FileSystemWatcher werden Änderungen an Dateien mithilfe des kurzen Namensformats 8.3 gemeldet. Beispielsweise könnte eine Änderung in "LongFileName.LongExtension" als "LongFil~" gemeldet werden. Lon".
  • Diese Klasse enthält eine Linknachfrage und eine Vererbungsnachfrage auf Klassenebene, die für alle Member gilt. Ein SecurityException Fehler wird ausgelöst, wenn der direkte Aufrufer oder die abgeleitete Klasse nicht über voll vertrauenswürdige Berechtigungen verfügt. Ausführliche Informationen zu Sicherheitsanforderungen finden Sie unter Linkanforderungen.
  • Die maximale Größe, die Sie für die Eigenschaft für die InternalBufferSize Überwachung eines Verzeichnisses über das Netzwerk festlegen können, beträgt 64 KB.

Kopieren und Verschieben von Ordnern

Das Betriebssystem und FileSystemWatcher das Objekt interpretieren eine Ausschneiden-und-Einfügen-Aktion oder eine Verschiebungsaktion als Umbenennungsaktion für einen Ordner und dessen Inhalt. Wenn Sie einen Ordner mit Dateien ausschneiden und in einen überwachten Ordner einfügen, meldet das FileSystemWatcher Objekt nur den Ordner als neu, aber nicht dessen Inhalt, da er im Wesentlichen nur umbenannt wird.

Um benachrichtigt zu werden, dass die Inhalte von Ordnern verschoben oder in einen überwachten Ordner kopiert wurden, stellen Sie OnChanged methoden bereit, und OnRenamed Ereignishandlermethoden, wie in der folgenden Tabelle vorgeschlagen.

Ereignishandler Behandelte Ereignisse Leistung
OnChanged Changed, CreatedDeleted Melden Sie Änderungen an Dateiattributen, erstellten Dateien und gelöschten Dateien.
OnRenamed Renamed Auflisten der alten und neuen Pfade umbenannter Dateien und Ordner, die bei Bedarf rekursiv erweitert werden.

Ereignisse und Puffergrößen

Beachten Sie, dass sich mehrere Faktoren darauf auswirken können, welche Dateisystemänderungsereignisse ausgelöst werden, wie in den folgenden Schritten beschrieben:

  • Allgemeine Dateisystemvorgänge lösen möglicherweise mehr als ein Ereignis aus. Wenn beispielsweise eine Datei von einem Verzeichnis in ein anderes verschoben wird, werden möglicherweise mehrere OnChanged und einige OnCreated Ereignisse OnDeleted ausgelöst. Das Verschieben einer Datei ist ein komplexer Vorgang, der aus mehreren einfachen Vorgängen besteht, wodurch mehrere Ereignisse ausgelöst werden. Ebenso können einige Anwendungen (z. B. Antivirensoftware) zusätzliche Dateisystemereignisse verursachen, die von FileSystemWatcher.
  • Die FileSystemWatcher Datenträger können überwacht werden, solange sie nicht gewechselt oder entfernt werden. Das FileSystemWatcher Löst keine Ereignisse für CDs und DVDs aus, da Zeitstempel und Eigenschaften nicht geändert werden können. Remotecomputer müssen eine der erforderlichen Plattformen installiert haben, damit die Komponente ordnungsgemäß funktioniert.

Beachten Sie, dass ein FileSystemWatcher Ereignis möglicherweise nicht angezeigt wird, wenn die Puffergröße überschritten wird. Um fehlende Ereignisse zu vermeiden, befolgen Sie die folgenden Richtlinien:

  • Erhöhen Sie die Puffergröße, indem Sie die InternalBufferSize Eigenschaft festlegen.
  • Vermeiden Sie das Ansehen von Dateien mit langen Dateinamen, da ein langer Dateiname dazu beiträgt, den Puffer aufzufüllen. Erwägen Sie, diese Dateien mit kürzeren Namen umzubenennen.
  • Halten Sie den Ereignisbehandlungscode so kurz wie möglich.