Kako raditi s FileSystemWatcher u C #

Klasa FileSystemWatcher u prostoru imena System.IO može se koristiti za nadgledanje promjena u datotečnom sustavu. Promatra datoteku ili direktorij u vašem sustavu radi promjena i pokreće događaje kada se promjene dogode.

Da bi FileSystemWatcher radio, trebali biste odrediti direktorij koji treba nadzirati. FileSystemWatcher pokreće sljedeće događaje kada se dogode promjene u direktoriju koji nadgleda.

  • Promijenjeno: Ovaj se događaj aktivira kada se promijeni datoteka ili direktorij na putu koji se nadgleda
  • Stvoreno: Ovaj se događaj aktivira kada se stvori datoteka ili direktorij na putu koji se nadgleda
  • Izbrisano: Ovaj se događaj aktivira kada se izbriše datoteka ili direktorij na putu koji se nadgleda
  • Pogreška: Ovaj se događaj pokreće, došlo je do pogreške zbog promjena na putu koji se prati
  • Preimenovano: Ovaj se događaj aktivira kada se datoteka ili direktorij u putu koji se nadgleda preimenuje

Stvaranje jednostavnog promatrača datotečnog sustava u C #

Stvorimo novi projekt aplikacije konzole u Visual Studiju kako bismo demonstrirali kako radi tipični promatrač datotečnog sustava. Imajte na umu da bi bolji način upotrebe klase FileSystemWatcher bio korištenje usluge Windows. Možete izraditi Windows uslugu koja koristi klasu FileSystemWatcher i šalje obavijesti kad i kada se dogode promjene na promatranom putu.

U svakom slučaju, idemo sada u malo koda. U metodu Main datoteke Program.cs napišite sljedeći kod.

static void Main(string[] args)

        {

            string path = @"D:\";

            MonitorDirectory(path);

            Console.ReadKey();

        }

Sljedeći isječak koda pokazuje kako bi izgledala metoda MonitorDirectory. Ova metoda koristila bi se za nadgledanje određenog direktorija i pokretanje događaja kad god se dogodi promjena. Staza direktorija prenosi se kao argument metode.

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;

        }

Imajte na umu kako su događaji deklarirani i da je svojstvo EnableRaisingEvents objekta promatrača datotečnog sustava postavljeno na true kako bi se omogućilo podizanje događaja kada dođe do promjene na putu koji se prati. U osnovi, ovo započinje stvarno nadgledanje - vi obavještavate FileSystemWatcher da započne nadzirati put i odsad pokretati odgovarajuće događaje.

Za svaki od događaja koje ste deklarirali trebali biste imati odgovarajući rukovatelj događajima koji se izvršava kad se događaj pokrene. Evo izvornog koda obrađivača događaja koji bi se aktivirao kad i kada se dogodi promjena direktorija koji se nadgleda.

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

        }

Evo kompletnog izvornog koda za vašu referencu.

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

        }

    }

}

Pod pretpostavkom da je imenovani direktorij dostupan na D: \> pogonu vašeg sustava, pokrenite aplikaciju konzole i zatim stvorite novu datoteku u direktoriju. Primijetili biste da se ime novostvorene datoteke prikazuje u prozoru konzole. To je zato što čim se stvori nova datoteka u direktoriju koji se nadgleda (D: \ u našem primjeru), aktivira se događaj FileSystemWatcher_Created.