Advanced   Java   Services FileSystemWatcher Back Next Up Home

FileSystemWatcher

Zunächst die zugehörige Klassenhierarchie.

FileSystemWatcher.jpg

Wie der Name schon vermuten läßt kann man diese Klasse dazu verwenden ein Dateisystem zu beobachten. Man übergibt dem Konstruktor ein Verzeichnis und gibt an welche Veränderungen in diesem Verzeichnis überwacht werden sollen. Mit Hilfe von Callbackroutinen kann man dann nicht nur das Erstellen und Löschen von Dateien feststellen, auch Umbennenungen und inhaltliche Veränderungen können erfasst werden.


Auszug aus der API
Konstruktoren
public FileSystemWatcher() Initializes a new instance of the FileSystemWatcher class.
public FileSystemWatcher(String dir) Initializes a new instance of the FileSystemWatcher class, given the specified directory to monitor.
Exceptions: ArgumentException, ArgumentNullException
public FileSystemWatcher(String dir, String filetypes) Initializes a new instance of the FileSystemWatcher class, given the specified directory and type of files to monitor.
Exceptions: ArgumentException, ArgumentNullException
Wichtige Methoden
Returntyp Name der Methode
virtual void BeginInit()
Begins the initialization of a FileSystemWatcher used on a form or used by another component. The initialization occurs at run time.
void EndInit()
Ends the initialization of a FileSystemWatcher used on a form or used by another component. The initialization occurs at run time.
Wichtige Properties
Typ Name der Property
bool EnableRaisingEvents
Gets or sets a value indicating whether the component is enabled.
Exceptions:ArgumentException, FileNotFoundException, ObjectDisposedException, PlatformNotSupportedException
String Filter
Gets or sets the filter string used to determine what files are monitored in a directory.
bool IncludeSubdirectories
Gets or sets a value indicating whether subdirectories within the specified path should be monitored.
NotifyFilters NotifyFilter
Gets or sets the type of changes to watch for.
Exceptions:ArgumentException, InvalidEnumArgumentException
String Path
Gets or sets the path of the directory to watch.
Exceptions: ArgumentException
Wichtige Events
Typ des Events Name des Events
FileSystemEventHandler Changed
Occurs when a file or directory in the specified Path is changed.
FileSystemEventHandler Created
Occurs when a file or directory in the specified Path is created.
FileSystemEventHandler Deleted
Occurs when a file or directory in the specified Path is deleted.
EventHandler Disposed
Occurs when the component is disposed by a call to the Dispose method. (Inherited from Component.)
ErrorEventHandler Error
Occurs when the internal buffer overflows.
RenamedEventHandler Renamed
Occurs when a file or directory in the specified Path is renamed.
typ name
xxx


public enum NotifyFilters

Mit den Konstanten aus dem Enum NotifyFilters setzt man die Property NotifyFilter von FilersystemWatcher. Die Tabelle zeigt die möglichen Werte.

Die Konstanten von NotifyFilters
Name Beschreibung
Attributes The attributes of the file or folder.
CreationTime The time the file or folder was created.
DirectoryName The name of the directory.
FileName The name of the file.
LastAccess The date the file or folder was last opened.
LastWrite The date the file or folder last had anything written to it.
Security The security settings of the file or folder.
Size The size of the file or folder.
name xxx


Defaulteinstellung

Falls man die Property NotifyFilter nicht setzt, wird die folgende Defaulteinstellung verwendet:

NotifyFilters.DirectoryName | NotifyFilters.FileName | NotifyFilters.LastWrite; // bitweises oder

Es ist aber immer besser die Einstellungen explizit zu setzen, der Code wird dadurch deutlich besser lesbar!



Codebeispiel

Wir schreiben eine Methode InitMonitor(), die ein FileSystemWatcherObjekt mit Hilfe von drei Parametern initialisiert und als Retutnwert zurückgibt. Das Hauptprogramm startet dann den Monitor und nimmt einige Änderungen in einem Verzeichnis vor. Mit Hilfe der Eventmethoden bekommmt das Programm Mitteilungen über diese Änderungen. Nach sechs Sekunden wird das Monitoring beendet. Erhöht man die Überwachungszeit kann man über ein Arbeistplatzfenster Änderungen im überwachten Verzeichnis vor nehmen und sieht die wie die Callbackmethoden gerufen werden.

using System;
using System.IO;
using System.Threading;

namespace example
{
   class filesystemwatcher
   {
      static void Main(string[] args)
      {
         // es geht auch ohne thread
         FileSystemWatcher fsw = InitMonitor("c:\\temp", true, null);

         DirectoryInfo newDir = new DirectoryInfo(@"c:\temp\newDir");
         if (newDir.Exists)
         {
            newDir.Delete();
            Console.WriteLine("directory geloescht");
         }
         else
         {
            newDir.Create();
            newDir.Attributes = FileAttributes.Normal;
            Console.WriteLine("directory erstellt");
         }

         FileInfo newFile = new FileInfo(@"c:\temp\newFile.txt");
         if (newFile.Exists)
         {
            newFile.Delete();
            Console.WriteLine("datei geloescht");
         }
         else
         {
            newFile.Create();
            Console.WriteLine("datei erstellt");
         }

         Thread.Sleep(6000);
         fsw.Dispose();
         Console.WriteLine("Ende");

      }  // end main


      private static FileSystemWatcher InitMonitor(string dir, bool includeSubDirs, string filter)
      {
         FileSystemWatcher fsw = new FileSystemWatcher(dir);
         try
         {
            //fsw.BeginInit();
            fsw.Filter = filter;
            fsw.IncludeSubdirectories = includeSubDirs;
            fsw.NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastAccess | NotifyFilters.LastWrite;
            fsw.Changed += new FileSystemEventHandler(FileChanged);
            fsw.Created += new FileSystemEventHandler(FileCreated);
            fsw.Deleted += new FileSystemEventHandler(FileDeleted);
            fsw.Renamed += new RenamedEventHandler(FileRenamed);

            fsw.EnableRaisingEvents = true;
            //fsw.EndInit();
            Console.WriteLine("Monitor started");
         }
         catch (Exception ex)
         {
            Console.WriteLine("Exception: " + ex.Message);
         }
         return fsw;
      }


      static void FileChanged(object sender, FileSystemEventArgs e)
      {
         Console.WriteLine("FileChanged {0}", e.Name);
         // Kann für eine Datei öfters aufgerufen werden
         // da jede Änderung der Attribute einen Event auslöst
      }

      static void FileCreated(object sender, FileSystemEventArgs e)
      {
         Console.WriteLine("FileCreated {0}", e.Name);
      }

      static void FileDeleted(object sender, FileSystemEventArgs e)
      {
         Console.WriteLine("FileDeleted {0}", e.Name);
      }

      static void FileRenamed(object sender, RenamedEventArgs e)
      {
         Console.WriteLine("FileRenamed\nold name = {0}\nnew name = {1}", e.OldName, e.Name);
      }

   }  // end class

}
Valid XHTML 1.0 Strict top Back Next Up Home