¿Hay alguna forma de determinar con el FSW si se ha eliminado un archivo o un directorio?.NET filesystemwatcher - ¿era un archivo o un directorio?
Respuesta
Puede consultar 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.
Se eliminó, por lo que estas llamadas fallarían, ¿no? –
@Steven Sudit: primero debe verificar la propiedad FileSystemEventArgs.ChangeType. –
'File.GetAttributes' arroja una' FileNotFoundException' para un archivo eliminado. –
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);
}
}
}
}
+1. Su solución es mucho más simple – fletcher
Obtuve los errores, pero se le ocurrió la idea antes que yo. –
Esta solución no tiene en cuenta que ambos 'FileSystemWatcher's se ejecutan en hilos separados. Por lo tanto, si hay muchos eventos en el directorio mirado, el orden de los eventos que ve en su aplicación puede ser diferente, es decir. puede registrar que un archivo fue creado en un directorio que aún no existe, seguido de un evento que crea dicho directorio. – Paya
que el uso temporal de la función "Camino" al principio, pero más tarde en caso de no borrar lo fijo por Directory.Exists. Sin embargo esto no soluciona el caso Eliminar
bool isDirectory = Path.GetExtension(e.FullPath) == string.Empty;
if (e.ChangeType != WatcherChangeTypes.Deleted)
{
isDirectory = Directory.Exists(e.FullPath);
}
Su pregunta sólo tiene sentido si podría haber un archivo y un directorio con el mismo nombre en el mismo camino. p.ej. Si tiene nombres de archivos sin extensión o directorios con extensión.
Si sus directorios y archivos siguen las convenciones habituales, solo comprueba 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 usted tiene que hacer frente a los problemas no convencionales que he mencionado al principio, que podría comprobar si existe un directorio o un archivo en esa ubicación. Si ninguno lo hace, los trata como si ambos fueran eliminados. Si uno de ellos existe, tratas al otro como si se hubiera eliminado.
Su consulta implica que mantiene una lista de los archivos y directorios en alguna parte, por lo que, al comparar con esa lista, puede tomar su decisión sobre el manejo.
Creo que este enfoque es mejor que la solución dada que usa dos monitores del sistema de archivos para diferenciar.
- 1. Uso FileSystemWatcher en un único archivo en C#
- 2. Equivalente de FileSystemWatcher (.NET) en Cocoa
- 3. Ningún archivo o directorio después de eliminar un subdirectorio duplicado
- 4. mysql_connect(): Ningún archivo o directorio
- 5. ¿Cómo puedo comprimir un directorio con .NET?
- 6. determinar wheteher entrada activo androide es un archivo o directorio
- 7. Supervisión de un directorio para la creación de archivos nuevos sin FileSystemWatcher
- 8. Comprobando si un archivo es un directorio o solo un archivo
- 9. cómo comprobar si un archivo es un directorio o un archivo normal en python?
- 10. Error de acceso a archivos con FileSystemWatcher cuando se agregan varios archivos a un directorio
- 11. monitorear los cambios en un archivo o directorio?
- 12. Xcode commit archivo o directorio
- 13. ./fastboot: Ningún archivo o directorio
- 14. ¿Cómo funciona FileSystemWatcher en otro directorio de computadoras?
- 15. 'dxerr9.h': Ningún archivo o directorio
- 16. Hacer un directorio y copiar un archivo
- 17. NSOpenPanel elegir un directorio (no un archivo)
- 18. ¿Cómo puedo averiguar si un archivo es un archivo o directorio si no existe?
- 19. ¿Cómo verificar con la ruta del archivo WINAPI es un disco o archivo o directorio?
- 20. FileSystemWatcher: ¿está listo para usar el archivo?
- 21. Determinar si una ruta dentro de un NSString es a un directorio, o un archivo?
- 22. último archivo modificado en un directorio
- 23. filesystemwatcher como servicio de Windows?
- 24. Después de incendios FileSystemWatcher - Grupo de subprocesos o hilo dedicado?
- 25. Cómo git commit un único archivo/directorio
- 26. Copie el archivo a un directorio diferente
- 27. Redirigir 301 de un directorio a un solo archivo
- 28. FileSystemWatcher para FTP
- 29. Ant: Encuentre la ruta de un archivo en un directorio
- 30. FileSystemWatcher y Windows 7
No estoy seguro de que pueda, francamente. La solución obvia sería recurrir al inicio para crear una lista de directorios. Si no está en esa lista, es un archivo. –
No es el "C# FileSystemWatcher". Es .NET FileSystemWatcher. Funciona igual de bien con todos los lenguajes .NET, no solo con C#. –
Se me ocurre que podría funcionar si ejecutó dos FSW diferentes monitoreando el mismo directorio y difiriendo solo en sus valores 'NotifyFiter'. –