Advanced Java Services | FileSystemWatcher |
Zunächst die zugehörige Klassenhierarchie.
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.
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 |
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 |
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!
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 }