Hur man arbetar med FileSystemWatcher i C #

FileSystemWatcher-klassen i Namnutrymmet System.IO kan användas för att övervaka ändringar av filsystemet. Den tittar på en fil eller en katalog i ditt system för ändringar och utlöser händelser när ändringar inträffar.

För att FileSystemWatcher ska fungera bör du ange en katalog som behöver övervakas. FileSystemWatcher tar upp följande händelser när ändringar sker i en katalog som den övervakar.

  • Ändrad: Denna händelse utlöses när en fil eller en katalog i sökvägen ändras
  • Skapad: Den här händelsen utlöses när en fil eller en katalog i sökvägen som övervakas skapas
  • Borttaget: Denna händelse utlöses när en fil eller en katalog i sökvägen som övervakas raderas
  • Fel: Denna händelse utlöses, det finns ett fel på grund av ändringar som gjorts i sökvägen
  • Bytt namn: Den här händelsen utlöses när en fil eller en katalog i sökvägen byts namn

Skapa en enkel filsystemvaktare i C #

Låt oss skapa ett nytt konsolapplikationsprojekt i Visual Studio för att visa hur en typisk filsystemvaktare fungerar. Observera att ett bättre sätt att använda klassen FileSystemWatcher skulle vara att använda en Windows-tjänst. Du kan bygga en Windows-tjänst som använder FileSystemWatcher-klassen och skickar ut aviseringar när och när ändringar sker i sökvägen.

Hur som helst, låt oss nu komma in på lite kod nu. Skriv följande kod i huvudmetoden i filen Program.cs.

static void Main(string[] args)

        {

            string path = @"D:\";

            MonitorDirectory(path);

            Console.ReadKey();

        }

Följande kodavsnitt visar hur MonitorDirectory-metoden skulle se ut. Denna metod skulle användas för att övervaka en viss katalog och lyfta händelser när en förändring inträffar. Katalogvägen skickas som ett argument till metoden.

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;

        }

Observera hur händelserna deklareras och att egenskapen EnableRaisingEvents för filsystemets tittarobjekt är satt till true för att möjliggöra höjning av händelser när en förändring på sökvägen sker. I grund och botten startar detta den faktiska övervakningen - du informerar FileSystemWatcher att börja övervaka sökvägen och höja lämpliga händelser hädanefter.

För var och en av de händelser som du har deklarerat bör du ha respektive händelsehanterare som körs när händelsen utlöses. Här är källkoden för händelsehanterarna som skulle utlösas när en ändring av katalogen som övervakas inträffar.

 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);

        }

Här är den fullständiga källkoden för din referens.

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);

        }

    }

}

Förutsatt att den namngivna katalogen är tillgänglig på D: \> -enheten i ditt system, kör konsolprogrammet och skapa sedan en ny fil i katalogen. Du kan observera att namnet på den nyskapade filen visas i konsolfönstret. Detta beror på att så snart en ny fil skapas i katalogen som övervakas (D: \ i vårt exempel) utlöses FileSystemWatcher_Created-händelsen.