כיצד לעבוד עם FileSystemWatcher ב- C #

ניתן להשתמש במחלקת FileSystemWatcher במרחב השמות System.IO כדי לפקח על שינויים במערכת הקבצים. הוא צופה בקובץ או בספריה במערכת שלך לשינויים ומפעיל אירועים כאשר מתרחשים שינויים.

על מנת ש- FileSystemWatcher יעבוד, עליך לציין ספרייה שיש לעקוב אחריה. FileSystemWatcher מעלה את האירועים הבאים כאשר מתרחשים שינויים בספריה שהוא עוקב אחריה.

  • השתנה: אירוע זה מופעל כאשר משתנים קובץ או ספריה בנתיב שעוקבים אחריו
  • נוצר: אירוע זה מופעל כאשר נוצר קובץ או ספריה בנתיב שעוקבים אחריו
  • נמחק: אירוע זה מופעל כאשר קובץ או ספריה בנתיב שעוקבים אחריו נמחקים
  • שגיאה: אירוע זה מופעל ויש שגיאה בגלל שינויים שבוצעו במעקב
  • שונה שם: אירוע זה מופעל כאשר שמם של קובץ או ספריה בנתיב שעוקבים אחריו

יצירת צופה פשוט במערכת הקבצים ב- C #

בואו ניצור פרויקט יישום קונסולה חדש ב- Visual Studio כדי להדגים כיצד פועל צופה במערכת קבצים טיפוסית. שים לב כי דרך טובה יותר להשתמש במחלקה FileSystemWatcher תהיה באמצעות שירות Windows. באפשרותך לבנות שירות Windows שמשתמש במחלקת FileSystemWatcher ושולח התראות כאשר מתרחשים שינויים בנתיב הנצפה.

בכל מקרה, בואו ניכנס עכשיו קצת לקוד. בשיטה הראשית של הקובץ Program.cs, כתוב את הקוד הבא.

static void Main(string[] args)

        {

            string path = @"D:\";

            MonitorDirectory(path);

            Console.ReadKey();

        }

קטע הקוד הבא מראה כיצד תראה שיטת MonitorDirectory. שיטה זו תשמש לניטור ספרייה מסוימת ולהעלאת אירועים בכל פעם שמתרחש שינוי. נתיב הספריה מועבר כארגומנט לשיטה.

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;

        }

שים לב כיצד מוצהרים האירועים וכי המאפיין EnableRaisingEvents של אובייקט הצופה במערכת הקבצים מוגדר כ- true כדי לאפשר העלאת אירועים כאשר מתרחש שינוי בנתיב הנמצא במעקב. למעשה, זה מתחיל את הניטור בפועל - אתה מודיע ל- FileSystemWatcher להתחיל לעקוב אחר הנתיב ולהעלות אירועים מתאימים מעתה ואילך.

עבור כל אחד מהאירועים שהצהרת עליך שיהיה לך מטפל האירועים המתאים שמופעל כאשר האירוע מופעל. הנה קוד המקור של מטפלי האירועים שיופעלו וכאשר יחול שינוי בספריה שעוקבים אחריה.

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

        }

הנה קוד המקור השלם לעיונך.

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

        }

    }

}

בהנחה שהספרייה ששמה זמינה בכונן D: \> של המערכת שלך, הפעל את יישום המסוף ואז צור קובץ חדש בספריה. היית שם לב כי שם הקובץ החדש שנוצר מוצג בחלון המסוף. הסיבה לכך היא שברגע שנוצר קובץ חדש בספריה הנמצאת במעקב (D: \ בדוגמה שלנו), מופעל האירוע FileSystemWatcher_Created.