Programování

Jak pracovat s FileSystemWatcher v C #

Třídu FileSystemWatcher v oboru názvů System.IO lze použít ke sledování změn v systému souborů. Sleduje změny v souboru nebo adresáři ve vašem systému a při výskytu změn spouští události.

Aby FileSystemWatcher fungoval, měli byste určit adresář, který je třeba monitorovat. FileSystemWatcher vyvolá následující události, když dojde ke změnám v adresáři, který sleduje.

  • Změněno: Tato událost se spustí, když se změní soubor nebo adresář v cestě, která je sledována
  • Vytvořeno: Tato událost je spuštěna, když je vytvořen soubor nebo adresář ve sledované cestě
  • Odstraněno: Tato událost je spuštěna, když je odstraněn soubor nebo adresář ve sledované cestě
  • Chyba: Tato událost je spuštěna, došlo k chybě v důsledku změn provedených ve sledované cestě
  • Přejmenováno: Tato událost je spuštěna, když je přejmenován soubor nebo adresář ve sledované cestě

Vytvoření jednoduchého sledovacího systému souborů v C #

Vytvořme nový projekt konzolové aplikace v sadě Visual Studio, abychom demonstrovali, jak funguje typický sledovač souborového systému. Všimněte si, že lepší způsob, jak používat třídu FileSystemWatcher, by bylo použití služby Windows. Můžete vytvořit službu Windows, která používá třídu FileSystemWatcher a odesílá oznámení, jakmile dojde ke změnám sledované cesty.

Pojďme se teď trochu věnovat kódu. V hlavní metodě souboru Program.cs napište následující kód.

static void Main (řetězec [] args)

        {

řetězec cesta = @ "D: \";

MonitorDirectory (cesta);

Console.ReadKey ();

        }

Následující fragment kódu ukazuje, jak by vypadala metoda MonitorDirectory. Tato metoda by se používala k monitorování konkrétního adresáře a vyvolávání událostí, kdykoli dojde ke změně. Cesta k adresáři je předána metodě jako argument.

private static void MonitorDirectory (cesta řetězce)

        {

FileSystemWatcher fileSystemWatcher = nový FileSystemWatcher ();

fileSystemWatcher.Path = cesta;

fileSystemWatcher.Created + = FileSystemWatcher_Created;

fileSystemWatcher.Renamed + = FileSystemWatcher_Renamed;

fileSystemWatcher.Deleted + = FileSystemWatcher_Deleted;

fileSystemWatcher.EnableRaisingEvents = true;

        }

Všimněte si, jak jsou události deklarovány a že vlastnost EnableRaisingEvents objektu sledovacího systému systému souborů je nastavena na hodnotu true, aby umožnila vyvolání událostí, když dojde ke změně sledované cesty. V podstatě se tím zahájí samotné monitorování - informujete FileSystemWatcher, aby začal sledovat cestu a od nynějška vyvolal příslušné události.

Pro každou z událostí, které jste deklarovali, byste měli mít příslušnou obslužnou rutinu události, která se provede při spuštění události. Tady je zdrojový kód obslužných rutin událostí, který by se spustil, když dojde ke změně sledovaného adresáře.

private static void FileSystemWatcher_Created (object sender, FileSystemEventArgs e)

        {

Console.WriteLine ("Soubor vytvořen: {0}", e.Name);

        }

private static void FileSystemWatcher_Renamed (object sender, FileSystemEventArgs e)

        {

Console.WriteLine ("Soubor přejmenován: {0}", e.Name);

        }

private static void FileSystemWatcher_Deleted (odesílatel objektu, FileSystemEventArgs e)

        {

Console.WriteLine ("Soubor smazán: {0}", e.Name);

        }

Zde je kompletní zdrojový kód pro vaši referenci.

pomocí systému;

pomocí System.IO;

jmenný prostor FileSystemWatcher

{

třídní program

    {

static void Main (řetězec [] args)

        {

řetězec cesta = @ "D: \";

MonitorDirectory (cesta);

Console.ReadKey ();

        }

private static void MonitorDirectory (cesta řetězce)

        {

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 (object sender, FileSystemEventArgs e)

        {

Console.WriteLine ("Soubor vytvořen: {0}", e.Name);

        }

private static void FileSystemWatcher_Renamed (object sender, FileSystemEventArgs e)

        {

Console.WriteLine ("Soubor přejmenován: {0}", e.Name);

        }

private static void FileSystemWatcher_Deleted (odesílatel objektu, FileSystemEventArgs e)

        {

Console.WriteLine ("Soubor smazán: {0}", e.Name);

        }

    }

}

Za předpokladu, že pojmenovaný adresář je k dispozici na jednotce D: \> ve vašem systému, spusťte konzolovou aplikaci a poté vytvořte nový soubor v adresáři. Pozorovali byste, že se název nově vytvořeného souboru zobrazuje v okně konzoly. Důvodem je, že jakmile se v sledovaném adresáři vytvoří nový soubor (v našem příkladu D: \), spustí se událost FileSystemWatcher_Created.

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