Programovanie

Ako pracovať s FileSystemWatcher v C #

Na sledovanie zmien v súborovom systéme možno použiť triedu FileSystemWatcher v mennom priestore System.IO. Sleduje zmeny v súbore alebo adresári vo vašom systéme a spúšťa udalosti, keď dôjde k zmenám.

Aby FileSystemWatcher fungoval, mali by ste určiť adresár, ktorý je potrebné monitorovať. FileSystemWatcher vyvolá nasledujúce udalosti, keď dôjde k zmenám v adresári, ktorý monitoruje.

  • Zmenené: Táto udalosť sa spustí, keď sa zmení súbor alebo adresár v sledovanej ceste
  • Vytvorené: Táto udalosť sa spustí, keď sa v sledovanej ceste vytvorí súbor alebo adresár
  • Odstránené: Táto udalosť sa spustí, keď sa odstráni súbor alebo adresár v sledovanej ceste
  • Chyba: Táto udalosť sa spustí, došlo k chybe v dôsledku zmien vykonaných v sledovanej ceste
  • Premenované: Táto udalosť sa spustí, keď sa premenuje súbor alebo adresár v sledovanej ceste

Vytvorenie jednoduchého pozorovateľa súborového systému v C #

Poďme vytvoriť nový projekt konzolovej aplikácie v Visual Studio, aby sme demonštrovali, ako funguje typický sledovač súborového systému. Upozorňujeme, že lepším spôsobom použitia triedy FileSystemWatcher by bolo použitie služby Windows. Môžete si vytvoriť službu Windows, ktorá používa triedu FileSystemWatcher a odosiela oznámenia, keď dôjde k zmenám na sledovanej ceste.

Poďme sa teraz venovať trochu kódu. V hlavnej metóde súboru Program.cs napíšte nasledujúci kód.

static void Main (reťazec [] args)

        {

reťazec cesta = @ "D: \";

MonitorDirectory (cesta);

Console.ReadKey ();

        }

Nasledujúci úryvok kódu ukazuje, ako by vyzerala metóda MonitorDirectory. Táto metóda by sa použila na sledovanie konkrétneho adresára a vyvolávanie udalostí vždy, keď dôjde k zmene. Cesta k adresáru sa odovzdá metóde ako argument.

private static void MonitorDirectory (cesta reťazca)

        {

FileSystemWatcher fileSystemWatcher = nový FileSystemWatcher ();

fileSystemWatcher.Path = cesta;

fileSystemWatcher.Created + = FileSystemWatcher_Created;

fileSystemWatcher.Renamed + = FileSystemWatcher_Renamed;

fileSystemWatcher.Deleted + = FileSystemWatcher_Deleted;

fileSystemWatcher.EnableRaisingEvents = true;

        }

Všimnite si, ako sú udalosti deklarované a že vlastnosť EnableRaisingEvents objektu sledovania systému súborov je nastavená na true, aby sa umožnilo vyvolávanie udalostí, keď dôjde k zmene na ceste, ktorá sa sleduje. V podstate sa tým spustí samotné sledovanie - informujete FileSystemWatcher, aby začal monitorovať cestu a odteraz vyvolával príslušné udalosti.

Pre každú z udalostí, ktoré ste deklarovali, by ste mali mať príslušný obslužný program udalostí, ktorý sa vykoná pri spustení udalosti. Tu je zdrojový kód obslužných rutín udalostí, ktorý by sa spustil, keď dôjde k zmene monitorovaného adresára.

private static void FileSystemWatcher_Created (odosielateľ objektu, FileSystemEventArgs e)

        {

Console.WriteLine ("Súbor vytvorený: {0}", e.Name);

        }

private static void FileSystemWatcher_Renamed (objekt odosielateľa, FileSystemEventArgs e)

        {

Console.WriteLine ("Súbor premenovaný: {0}", e.Name);

        }

private static void FileSystemWatcher_Deleted (odosielateľ objektu, FileSystemEventArgs e)

        {

Console.WriteLine ("Súbor odstránený: {0}", e.Name);

        }

Tu je kompletný zdrojový kód pre vašu potrebu.

pomocou systému;

pomocou System.IO;

menný priestor FileSystemWatcher

{

triedny program

    {

static void Main (reťazec [] args)

        {

reťazec cesta = @ "D: \";

MonitorDirectory (cesta);

Console.ReadKey ();

        }

private static void MonitorDirectory (cesta reťazca)

        {

FileSystemWatcher fileSystemWatcher = nový FileSystemWatcher ();

fileSystemWatcher.Path = cesta;

fileSystemWatcher.Created + = FileSystemWatcher_Created;

fileSystemWatcher.Renamed + = FileSystemWatcher_Renamed;

fileSystemWatcher.Deleted + = FileSystemWatcher_Deleted;

fileSystemWatcher.EnableRaisingEvents = true;

        }

private static void FileSystemWatcher_Created (odosielateľ objektu, FileSystemEventArgs e)

        {

Console.WriteLine ("Súbor vytvorený: {0}", e.Name);

        }

private static void FileSystemWatcher_Renamed (objekt odosielateľa, FileSystemEventArgs e)

        {

Console.WriteLine ("Súbor premenovaný: {0}", e.Name);

        }

private static void FileSystemWatcher_Deleted (odosielateľ objektu, FileSystemEventArgs e)

        {

Console.WriteLine ("Súbor odstránený: {0}", e.Name);

        }

    }

}

Za predpokladu, že je pomenovaný adresár k dispozícii na jednotke D: \> vo vašom systéme, spustite konzolovú aplikáciu a potom v adresári vytvorte nový súbor. Môžete si všimnúť, že názov novovytvoreného súboru sa zobrazuje v okne konzoly. Je to tak preto, že akonáhle sa v sledovanom adresári vytvorí nový súbor (v našom príklade D: \), spustí sa udalosť FileSystemWatcher_Created.

$config[zx-auto] not found$config[zx-overlay] not found