BigBastis Blog

C#: Das Dateisystem mit dem FileSystemWatcher überwachen

Introduction

user

Sebastian Gross

Sebastian Gross arbeitet in Bielefeld als Softwareentwickler für .NET und Java im Bereich Web.Als Fan der .NET-Plattform lässt er sich kein Userguppen Treffen und Community Event im Raum OWL entgehen.Dabei hat er eine besondere Vorliebe für das ASP.NET MVC Framework und für das Test Driven Development (TDD) entwickelt.


LATEST POSTS

Handling too long scrollspy menus 10th June, 2015

Java: Create ZIP archive 23rd March, 2015

Allgemein

C#: Das Dateisystem mit dem FileSystemWatcher überwachen

Posted on .

Oftmals ist man darauf angewiesen, dein Inhalt von einem oder mehreren Ordnern zu überwachen und auf Änderungen oder Aktionen des Benutzers  zu reagieren.

Dafür gibt es verschiedene Ansätze, ich will euch heute den FileSystemWatcher aus dem .NET Framework vorstellen. Der FileSystemWatcher (FSW) bietet uns eine Reihe von Events mit denen wir das System immer im Blick haben, darunter fallen die Events Changed, Created, Renamed und Deleted.

Da der FSW auch in einem eigenem Thread läuft gibt es auch keine Kollisionen mit der GUI und den anderen Programmabläufen. Hier muss man lediglich darauf achten, dass man keine Exceptions wegen der Threadübergreifenden Aktionen bekommt!

Fangen wir mit der Implementierung an:

//Eine neue FileSystemWatcher Instanz erstellen
FileSystemWatcher fw = new FileSystemWatcher("C:\temp");

//Events regestrieren
fw.Changed += new FileSystemEventHandler(onChanged);
fw.Created += new FileSystemEventHandler(onChanged);
fw.Deleted += new FileSystemEventHandler(onChanged);
fw.Renamed += new RenamedEventHandler(onRenamed);

fw.IncludeSubdirectories = true;

//Überwachung starten
fw.EnableRaisingEvents = true;

Hier erzeugen wir als erstes eine neues FileSystemWatcher Objekt und geben diesem einen expliziten Pfad als Parameter. Dieser Pfad wird dann vom FSW überwacht.

Als nächstes werden die vier Events registriert über die der FSW uns informieren soll. Zum Schluss sagen wir dem FSW noch, dass er auch die Unterordner des gewählten Pfads mit überwachen soll und starten die Überwachung.

Nun müssen wir noch die Events implementieren:

private void onChanged(object source, FileSystemEventArgs e)
{
if (this.lstEvents.InvokeRequired)
{
addItemDel ad = new addItemDel(addItem);
this.Invoke(ad, new object[] { e.ChangeType + " " + e.FullPath });
}
else
{
lstEvents.Items.Add(e.ChangeType + " " + e.FullPath);
}
}

private void onRenamed(object source, RenamedEventArgs e)
{
if (this.lstEvents.InvokeRequired)
{
addItemDel ad = new addItemDel(addItem);
this.Invoke(ad, new object[] { e.ChangeType + " " + e.OldName + " -> " + e.Name });
}
else
{
lstEvents.Items.Add(e.ChangeType + " " + e.OldName + " -> " + e.Name);
}
}

Da der FSW in einem eigenem Thread läuft müssen wir hier darauf achten und die Werte aus den Events über Delegate Methoden übergeben.

private delegate void addItemDel(string text);

private void addItem(string text)
{
lstEvents.Items.Add(text);
}

Aus den übergebenen Event Argumenten können wir alle für uns wichtigen Informationen auslesen, wie den kompletten Pfad und die Dateinamen vor und nach dem umbenennen.

Übrigens nutzen zB. auch Antivieren Programme auch diese Technik für den Liveschutz vom Dateisystem.

Die FSW Klasse bietet noch weitere Möglichkeiten, mehr dazu im MSDN.

Natürlich habe ich hier auch wieder eine kleine Demo vorbereitet:

Bild 1: Events die aus dem überwachten Ordner ausgelesen wurden

Die Demo gibts hier:

profile

Sebastian Gross

http://www.bigbasti.com

Sebastian Gross arbeitet in Bielefeld als Softwareentwickler für .NET und Java im Bereich Web.Als Fan der .NET-Plattform lässt er sich kein Userguppen Treffen und Community Event im Raum OWL entgehen.Dabei hat er eine besondere Vorliebe für das ASP.NET MVC Framework und für das Test Driven Development (TDD) entwickelt.

Comments
user

Author bigbasti87

Posted at 08:14 14. April 2010.

Bloggd: C#: Das Dateisystem mit dem FileSystemWatcher überwachen – http://blog.bigbasti.com/c-das-dateisyst

user

Author Alex

Posted at 10:19 2. Februar 2011.

Hy,
finde den Artikel sehr gut – danke
wäre es möglich das Demo wieder zur Verfügung zu stellen.

Danke
lg alex

user

Author admin

Posted at 14:55 2. Februar 2011.

Hallo Alex,
danke für den Hinweis, ich habe den Link nun angepasst, sodass es nun wieder gehen sollte 🙂
lg, Sebastian

user

Author Nick

Posted at 10:02 9. November 2011.

Hallo!

Gibt es das Demo Projekt noch zum Download?

lG Nick

user

Author Rick

Posted at 09:40 11. Juni 2012.

Ich hätte auch Interesse an dem Demo Projekt!

user

Author Sebastian Gross

Posted at 08:03 19. Juni 2012.

Ich habe momentan ein paar Probleme mit dem Hosting, werde das schnellstmöglich korrigieren. Sorry!

Kommentar verfassen

View Comments (6) ...
Navigation