net ejemplo c# .net filesystemwatcher

c# - ejemplo - .NET filesystemwatcher: ¿era un archivo o un directorio?



filesystemwatcher c# ejemplo (4)

Aquí hay una versión simplificada y corregida de la solución de fletcher:

namespace Watcher { class Program { private const string Directory = @"C:/Temp"; private static FileSystemWatcher _fileWatcher; private static FileSystemWatcher _dirWatcher; static void Main(string[] args) { _fileWatcher = new FileSystemWatcher(Directory); _fileWatcher.IncludeSubdirectories = true; _fileWatcher.NotifyFilter = NotifyFilters.FileName; _fileWatcher.EnableRaisingEvents = true; _fileWatcher.Deleted += WatcherActivity; _dirWatcher = new FileSystemWatcher(Directory); _dirWatcher.IncludeSubdirectories = true; _dirWatcher.NotifyFilter = NotifyFilters.DirectoryName; _dirWatcher.EnableRaisingEvents = true; _dirWatcher.Deleted += WatcherActivity; Console.ReadLine(); } static void WatcherActivity(object sender, FileSystemEventArgs e) { if(sender == _dirWatcher) { Console.WriteLine("Directory:{0}",e.FullPath); } else { Console.WriteLine("File:{0}",e.FullPath); } } } }

¿Hay alguna manera de determinar con el FSW si se ha eliminado un archivo o un directorio?


Inicialmente, uso temporalmente la función "Ruta", pero luego, en caso de no eliminarlo, lo soluciono con Directory.Exists. Sin embargo eso no arregla el caso de eliminar

bool isDirectory = Path.GetExtension(e.FullPath) == string.Empty; if (e.ChangeType != WatcherChangeTypes.Deleted) { isDirectory = Directory.Exists(e.FullPath); }


Podría interrogar la propiedad FileSystemEventArgs.FullPath para saber si es un directorio o un archivo.

if (Path.GetFileName(e.FullPath) == String.Empty) { //it''s a directory. }

Para comprobar si se trata de un archivo o directorio.


Su pregunta solo tiene sentido si puede haber un archivo y un directorio con el mismo nombre en la misma ruta. Por ejemplo, si tiene nombres de archivo sin extensión o directorios con extensión.

Si sus directorios y archivos siguen las convenciones habituales, solo compruebe la presencia de una extensión en la ruta completa ( bool iSDirectory = Path.GetExtension(e.FullPath).Equals(""); ), que funciona si el archivo / directorio existe o no, porque el método simplemente analiza la ruta dada y no tiene conexión con el archivo en absoluto.

Si tiene que lidiar con los problemas no convencionales que mencioné al principio, puede verificar si existe un directorio o un archivo en esa ubicación. Si ninguno de los dos lo hace, trátelos como si se hubieran eliminado ambos. Si uno de ellos existe, trata al otro como si se hubiera eliminado.

Su consulta implica que mantiene una lista de los archivos y directorios en algún lugar, por lo que, comparando esa lista, puede tomar una decisión sobre el manejo.

Creo que este enfoque es mejor que la solución dada, que utiliza dos observadores del sistema de archivos para distinguir la diferencia.