Estoy encontrando un problema recurrente en una aplicación que rastrea el contenido de archivos dentro de un directorio, basado en la API de Java 7 WatchService. Cuando el sistema de archivos subyacente activa un evento de modificación en un archivo, quiero calcular su SHA-256 de inmediato.E/S Java: Asegurar que un archivo no esté bloqueado por otro proceso antes de cualquier operación de r/w
Pero a menudo ocurre que otro proceso tiene el archivo abierto (es decir, Word), lo que detiene un bloqueo exclusivo y evita que mi aplicación de cualquier operación de lectura/escritura. Si se crea ninguna Corriente/Canal contra el archivo abierto, un FileNotFoundException o una FileSystemException para la API de nio se lanza con un mensaje como:
El proceso no tiene acceso al archivo porque está siendo utilizado por otro proceso
No pude encontrar una solución que detectaría tales casos sin enmascarar una "real" FileNotFoundException cuando el archivo no existe realmente en el fs.
He tenido la idea de verificar la existencia a través de File.exists y luego, si se produce una excepción FileNotFoundException al abrir una secuencia, podría inferir que el archivo está bloqueado. ¡Estoy abierto a cualquier aporte sobre esto!
Gracias!
siempre encontrar una solución a esto? –
Terminé usando la heurística mencionada, si File.exists devuelve verdadero dentro del bloque catch de FileNotFoundException, lo interpreto como un archivo bloqueado. – sylvain