2011-11-20 18 views
8

Quiero detectar si un archivo o directorio ha sido eliminado. Obviamente, no puedo usar Files.isDirectory (Path) y el equivalente para los archivos, porque el archivo/directorio ya está eliminado.WatchService/Deletions/File or Directory?

Pensé en usar dos instancias de WatchService para ver cambios de archivos o cambios de directorio, entonces sé todo el tiempo si es un archivo o directorio. Tristemente no puedo encontrar un método apropiado.

Editar: Creo que cualquier otra solución con respecto a la comprobación de una representación en cadena de nombres de archivos frente a directorios es propensa a errores.

+1

¿Has probado [esto] (http://docs.oracle.com/javase/tutorial/essential/io/notification.html)? – home

+0

No puedo ver cómo esto ayuda (lo he leído antes de usar WatchService en absoluto), pero tal vez estoy ciego? ;-) – Johannes

+0

Hm, ¿quizás no entendí tu pregunta tampoco? Puede registrar el servicio para 'escuchar' en un directorio determinado: ¿cuál es el problema con eso? – home

Respuesta

2

Guarde una copia local de los metadatos en el directorio que está mirando, desde simplemente una lista de entradas junto con si cada uno es un archivo o directorio, junto con cualquier otro atributo que pueda estar interesado una vez borrado - p. tamaño o la última hora modificada A continuación, puede consultar estos metadatos una vez que reciba una notificación de eliminación.

Puede poblar este almacén de metadatos cuando comience su ciclo de vigilancia, y amplíe su monitor con ENTRY_CREATE y ENTRY_MODIFY para mantener su metadata almacenada mientras se realizan otros cambios mientras se está mirando el directorio.

Otorgado, esto no será sin una sobrecarga adicional en la memoria para mantener estos datos, pero para la mayoría de los casos de uso, debería ser bastante insignificante.

+0

Buena idea, pero parece que está más encendida que mi solución propuesta. Bueno, no puedo pensar en otra solución. – Johannes