So arbeiten Sie mit FileSystemWatcher in C #

Die FileSystemWatcher-Klasse im System.IO-Namespace kann zum Überwachen von Änderungen am Dateisystem verwendet werden. Es überwacht eine Datei oder ein Verzeichnis in Ihrem System auf Änderungen und löst Ereignisse aus, wenn Änderungen auftreten.

Damit der FileSystemWatcher funktioniert, sollten Sie ein Verzeichnis angeben, das überwacht werden muss. Der FileSystemWatcher löst die folgenden Ereignisse aus, wenn Änderungen an einem von ihm überwachten Verzeichnis auftreten.

  • Geändert: Dieses Ereignis wird ausgelöst, wenn eine Datei oder ein Verzeichnis im überwachten Pfad geändert wird
  • Erstellt: Dieses Ereignis wird ausgelöst, wenn eine Datei oder ein Verzeichnis im überwachten Pfad erstellt wird
  • Gelöscht: Dieses Ereignis wird ausgelöst, wenn eine Datei oder ein Verzeichnis im überwachten Pfad gelöscht wird
  • Fehler: Dieses Ereignis wird ausgelöst. Es liegt ein Fehler aufgrund von Änderungen im überwachten Pfad vor
  • Umbenannt: Dieses Ereignis wird ausgelöst, wenn eine Datei oder ein Verzeichnis im überwachten Pfad umbenannt wird

Erstellen eines einfachen Dateisystem-Watchers in C #

Erstellen wir ein neues Konsolenanwendungsprojekt in Visual Studio, um zu demonstrieren, wie ein typischer Dateisystem-Watcher funktioniert. Beachten Sie, dass eine bessere Möglichkeit zur Verwendung der FileSystemWatcher-Klasse die Verwendung eines Windows-Dienstes ist. Sie können einen Windows-Dienst erstellen, der die FileSystemWatcher-Klasse verwendet und Benachrichtigungen sendet, sobald Änderungen am überwachten Pfad auftreten.

Wie auch immer, lassen Sie uns jetzt auf ein bisschen Code eingehen. Schreiben Sie in der Hauptmethode der Datei Program.cs den folgenden Code.

static void Main(string[] args)

        {

            string path = @"D:\";

            MonitorDirectory(path);

            Console.ReadKey();

        }

Das folgende Codefragment zeigt, wie die MonitorDirectory-Methode aussehen würde. Diese Methode wird verwendet, um ein bestimmtes Verzeichnis zu überwachen und Ereignisse auszulösen, wenn eine Änderung auftritt. Der Verzeichnispfad wird als Argument an die Methode übergeben.

private static void MonitorDirectory(string path)

        {

            FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();

            fileSystemWatcher.Path = path;

            fileSystemWatcher.Created += FileSystemWatcher_Created;

            fileSystemWatcher.Renamed += FileSystemWatcher_Renamed;

            fileSystemWatcher.Deleted += FileSystemWatcher_Deleted;

            fileSystemWatcher.EnableRaisingEvents = true;

        }

Beachten Sie, wie die Ereignisse deklariert werden und dass die EnableRaisingEvents-Eigenschaft des Dateisystem-Watcher-Objekts auf true gesetzt ist, um das Auslösen von Ereignissen zu ermöglichen, wenn eine Änderung am überwachten Pfad auftritt. Im Wesentlichen wird damit die eigentliche Überwachung gestartet. Sie informieren FileSystemWatcher, den Pfad zu überwachen und von nun an geeignete Ereignisse auszulösen.

Für jedes der von Ihnen deklarierten Ereignisse sollte der entsprechende Ereignishandler vorhanden sein, der ausgeführt wird, wenn das Ereignis ausgelöst wird. Hier ist der Quellcode der Ereignishandler, die ausgelöst werden, wenn eine Änderung des überwachten Verzeichnisses erfolgt.

 private static void FileSystemWatcher_Created(object sender, FileSystemEventArgs e)

        {

            Console.WriteLine("File created: {0}", e.Name);

        }

        private static void FileSystemWatcher_Renamed(object sender, FileSystemEventArgs e)

        {

            Console.WriteLine("File renamed: {0}", e.Name);

        }

        private static void FileSystemWatcher_Deleted(object sender, FileSystemEventArgs e)

        {

            Console.WriteLine("File deleted: {0}", e.Name);

        }

Hier ist der vollständige Quellcode als Referenz.

using System;

using System.IO;

namespace FileSystemWatcher

{

    class Program

    {

        static void Main(string[] args)

        {

            string path = @"D:\";

            MonitorDirectory(path);

            Console.ReadKey();

        }

        private static void MonitorDirectory(string path)

        {

            FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();

            fileSystemWatcher.Path = path;

            fileSystemWatcher.Created += FileSystemWatcher_Created;

            fileSystemWatcher.Renamed += FileSystemWatcher_Renamed;

            fileSystemWatcher.Deleted += FileSystemWatcher_Deleted;

            fileSystemWatcher.EnableRaisingEvents = true;

        }

        private static void FileSystemWatcher_Created(object sender, FileSystemEventArgs e)

        {

            Console.WriteLine("File created: {0}", e.Name);

        }

        private static void FileSystemWatcher_Renamed(object sender, FileSystemEventArgs e)

        {

            Console.WriteLine("File renamed: {0}", e.Name);

        }

        private static void FileSystemWatcher_Deleted(object sender, FileSystemEventArgs e)

        {

            Console.WriteLine("File deleted: {0}", e.Name);

        }

    }

}

Angenommen, das angegebene Verzeichnis ist auf dem Laufwerk D: \> Ihres Systems verfügbar, führen Sie die Konsolenanwendung aus und erstellen Sie eine neue Datei im Verzeichnis. Sie werden feststellen, dass der Name der neu erstellten Datei im Konsolenfenster angezeigt wird. Dies liegt daran, dass das FileSystemWatcher_Created-Ereignis ausgelöst wird, sobald eine neue Datei in dem überwachten Verzeichnis erstellt wird (in unserem Beispiel D: \).