Come lavorare con FileSystemWatcher in C #

La classe FileSystemWatcher nello spazio dei nomi System.IO può essere utilizzata per monitorare le modifiche al file system. Controlla un file o una directory nel tuo sistema per le modifiche e attiva gli eventi quando si verificano le modifiche.

Affinché FileSystemWatcher funzioni, è necessario specificare una directory che deve essere monitorata. FileSystemWatcher genera i seguenti eventi quando si verificano modifiche a una directory che sta monitorando.

  • Modificato: questo evento viene attivato quando viene modificato un file o una directory nel percorso monitorato
  • Creato: questo evento viene attivato quando viene creato un file o una directory nel percorso monitorato
  • Eliminato: questo evento viene attivato quando viene eliminato un file o una directory nel percorso monitorato
  • Errore: questo evento viene attivato in caso di errore dovuto alle modifiche apportate al percorso monitorato
  • Rinominato: questo evento viene attivato quando viene rinominato un file o una directory nel percorso monitorato

Creazione di un semplice watcher del file system in C #

Creiamo un nuovo progetto di applicazione console in Visual Studio per dimostrare come funziona un tipico watcher del file system. Si noti che un modo migliore per utilizzare la classe FileSystemWatcher sarebbe utilizzare un servizio Windows. È possibile creare un servizio Windows che utilizza la classe FileSystemWatcher e invia notifiche quando e quando si verificano modifiche al percorso controllato.

Ad ogni modo, entriamo ora in un po 'di codice. Nel metodo Main del file Program.cs scrivere il codice seguente.

static void Main(string[] args)

        {

            string path = @"D:\";

            MonitorDirectory(path);

            Console.ReadKey();

        }

Il frammento di codice seguente mostra l'aspetto del metodo MonitorDirectory. Questo metodo verrebbe utilizzato per monitorare una particolare directory e generare eventi ogni volta che si verifica una modifica. Il percorso della directory viene passato come argomento al metodo.

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;

        }

Notare come vengono dichiarati gli eventi e che la proprietà EnableRaisingEvents dell'oggetto watcher del file system è impostata su true per abilitare la generazione di eventi quando si verifica una modifica sul percorso monitorato. In sostanza, questo avvia il monitoraggio effettivo: stai informando FileSystemWatcher di iniziare a monitorare il percorso e di generare eventi appropriati d'ora in poi.

Per ciascuno degli eventi che hai dichiarato, dovresti avere il rispettivo gestore di eventi che viene eseguito quando l'evento viene attivato. Di seguito è riportato il codice sorgente dei gestori di eventi che verrebbero attivati ​​ogni volta che si verifica una modifica alla directory monitorata.

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

        }

Ecco il codice sorgente completo come riferimento.

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

        }

    }

}

Supponendo che la directory denominata sia disponibile sull'unità D: \> del sistema, eseguire l'applicazione console e quindi creare un nuovo file nella directory. Si osserverà che il nome del file appena creato viene visualizzato nella finestra della console. Questo perché non appena viene creato un nuovo file nella directory monitorata (D: \ nel nostro esempio), viene attivato l'evento FileSystemWatcher_Created.