Cara bekerja dengan FileSystemWatcher di C #

Kelas FileSystemWatcher di ruang nama System.IO boleh digunakan untuk memantau perubahan pada sistem fail. Ini menonton file atau direktori di sistem anda untuk perubahan dan memicu peristiwa ketika perubahan terjadi.

Agar FileSystemWatcher berfungsi, anda harus menentukan direktori yang perlu dipantau. FileSystemWatcher memunculkan peristiwa berikut ketika perubahan terjadi pada direktori yang dipantau.

  • Berubah: Peristiwa ini dipicu ketika file atau direktori di jalan yang dipantau diubah
  • Dicipta: Peristiwa ini dipicu ketika file atau direktori di jalan yang dipantau dibuat
  • Dihapus: Peristiwa ini dipicu apabila fail atau direktori di jalan yang dipantau dihapus
  • Ralat: Peristiwa ini dipicu ada ralat kerana perubahan yang dilakukan di jalan yang dipantau
  • Dinamakan semula: Peristiwa ini dipicu apabila fail atau direktori di jalan yang dipantau dinamakan semula

Membuat pemerhati sistem fail mudah di C #

Mari buat projek aplikasi konsol baru di Visual Studio untuk menunjukkan bagaimana pemantau sistem fail biasa berfungsi. Perhatikan bahawa cara yang lebih baik untuk menggunakan kelas FileSystemWatcher adalah dengan menggunakan Perkhidmatan Windows. Anda boleh membina Perkhidmatan Windows yang menggunakan kelas FileSystemWatcher dan menghantar pemberitahuan apabila perubahan berlaku pada jalan yang ditonton.

Bagaimanapun, mari kita masukkan sedikit kod sekarang. Dalam kaedah Utama fail Program.cs, tulis kod berikut.

static void Main(string[] args)

        {

            string path = @"D:\";

            MonitorDirectory(path);

            Console.ReadKey();

        }

Coretan kod berikut menunjukkan bagaimana kaedah MonitorDirectory. Metode ini akan digunakan untuk memantau direktori tertentu dan meningkatkan peristiwa setiap kali terjadi perubahan. Laluan direktori diteruskan sebagai argumen kepada kaedah tersebut.

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;

        }

Perhatikan bagaimana peristiwa diisytiharkan dan bahawa sifat EnableRaisingEvents dari objek pemantau sistem fail ditetapkan ke benar untuk membolehkan peningkatan peristiwa apabila perubahan pada jalur yang dipantau terjadi. Pada hakikatnya, ini memulakan pemantauan sebenar - anda memaklumkan kepada FileSystemWatcher untuk mula memantau jalan dan meningkatkan peristiwa yang sesuai untuk selanjutnya.

Untuk setiap acara yang telah anda nyatakan, anda harus mempunyai pengendali acara masing-masing yang akan dilaksanakan ketika peristiwa itu dipicu. Berikut adalah kod sumber pengendali acara yang akan dipicu apabila berlaku perubahan pada direktori yang dipantau.

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

        }

Inilah kod sumber lengkap untuk rujukan anda.

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

        }

    }

}

Dengan mengandaikan bahawa direktori bernama tersedia di pemacu D: \> sistem anda, jalankan aplikasi konsol dan kemudian buat fail baru di dalam direktori. Anda akan melihat bahawa nama fail yang baru dibuat dipaparkan di tetingkap konsol. Ini kerana sebaik sahaja fail baru dibuat di direktori yang dipantau (D: \ dalam contoh kami), peristiwa FileSystemWatcher_Created akan dipicu.