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