notifyfilter

Mattepuffo's logo
Monitorare una directory in C#

Monitorare una directory in C#

Avevo la necesità di controllare le modifiche effettuate dentro una particolare directory.

Grazie al forum.html.it sono arrivato presto alla soluzione: usare la classe FileSystemWatcher di C#.

Vediamo come usare questa classe.

Questa è la classe che mi sono creato io:

namespace DirectoryMonitor
{
    class DirMonitor
    {
        private string path;
        private DateTime dt = new DateTime();

        public DirMonitor(string path)
        {
            this.path = path;
        }

        public void Watcher()
        {
            FileSystemWatcher fw = new FileSystemWatcher();
            fw.Path = path;
            fw.IncludeSubdirectories = false;
            fw.NotifyFilter =
                NotifyFilters.LastAccess |
                NotifyFilters.LastWrite |
                NotifyFilters.FileName |
                NotifyFilters.DirectoryName;
            fw.Changed += new FileSystemEventHandler(OnChanged);
            fw.Created += new FileSystemEventHandler(OnChanged);
            fw.Deleted += new FileSystemEventHandler(OnChanged);
            fw.Renamed += new RenamedEventHandler(OnRenamed);
            fw.EnableRaisingEvents = true;

            Console.WriteLine("Digita q per uscire.");
            Console.WriteLine();
            while (Console.Read() != 'q') ;
        }

        private void OnChanged(object source, FileSystemEventArgs e)
        {
            dt = DateTime.UtcNow;
            Console.WriteLine("PATH " + e.FullPath + " " + e.ChangeType + " AT " + dt.ToLocalTime());
        }

        private void OnRenamed(object source, RenamedEventArgs e)
        {
            dt = DateTime.UtcNow;
            Console.WriteLine("OLD PATH " + e.OldFullPath + " NEW PATH " + e.FullPath + " " + e.ChangeType + " AT " + dt.ToLocalTime());
        }
    }
}