Bagaimana bekerja dengan FileSystemWatcher di C #

Kelas FileSystemWatcher di namespace System.IO dapat digunakan untuk memantau perubahan pada sistem file. Ini mengawasi 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 kejadian berikut saat terjadi perubahan pada direktori yang dipantau.

  • Berubah: Peristiwa ini dipicu saat file atau direktori di jalur yang dipantau diubah
  • Dibuat: Peristiwa ini dipicu saat dibuatnya file atau direktori di jalur yang dipantau
  • Dihapus: Peristiwa ini dipicu saat file atau direktori di jalur yang dipantau dihapus
  • Kesalahan: Peristiwa ini dipicu adanya kesalahan karena perubahan yang dilakukan di jalur yang dipantau
  • Berganti nama: Peristiwa ini dipicu saat file atau direktori di jalur yang dipantau diganti namanya

Membuat pengamat sistem file sederhana di C #

Mari buat proyek aplikasi konsol baru di Visual Studio untuk mendemonstrasikan cara kerja pengamat sistem file yang khas. Perhatikan bahwa cara yang lebih baik untuk menggunakan kelas FileSystemWatcher adalah dengan menggunakan Layanan Windows. Anda dapat membangun Layanan Windows yang menggunakan kelas FileSystemWatcher dan mengirimkan pemberitahuan saat dan saat terjadi perubahan pada jalur yang diawasi.

Bagaimanapun, sekarang mari kita masuk ke sedikit kode sekarang. Dalam metode Utama dari file Program.cs, tulis kode berikut.

static void Main(string[] args)

        {

            string path = @"D:\";

            MonitorDirectory(path);

            Console.ReadKey();

        }

Potongan kode berikut menunjukkan bagaimana metode MonitorDirectory akan terlihat. Metode ini akan digunakan untuk memantau direktori tertentu dan meningkatkan peristiwa setiap kali terjadi perubahan. Jalur direktori diteruskan sebagai argumen ke 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;

        }

Perhatikan bagaimana peristiwa dideklarasikan dan bahwa properti EnableRaisingEvents objek pengamat sistem file disetel ke true untuk mengaktifkan peristiwa peningkatan saat terjadi perubahan pada jalur yang dipantau. Intinya, ini memulai pemantauan sebenarnya - Anda memberi tahu FileSystemWatcher untuk mulai memantau jalur dan meningkatkan kejadian yang sesuai untuk selanjutnya.

Untuk setiap kejadian yang telah Anda deklarasikan, Anda harus memiliki pengendali kejadian masing-masing yang dijalankan saat kejadian dipicu. Berikut kode sumber pengendali kejadian yang akan dipicu saat dan saat terjadi 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);

        }

Berikut kode sumber lengkap untuk referensi 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 asumsi bahwa direktori bernama tersedia di drive D: \> sistem Anda, jalankan aplikasi konsol dan kemudian buat file baru di direktori tersebut. Anda akan mengamati bahwa nama file yang baru dibuat ditampilkan di jendela konsol. Ini karena segera setelah file baru dibuat di direktori yang sedang dipantau (D: \ dalam contoh kami), acara FileSystemWatcher_Created dipicu.