es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

java.nio.file.AccessDeniedException cuando se mueve un archivo (solo en hijos directos de la raíz).

Mi programa está utilizando el modelo de actores para cambiar el nombre de cada carpeta/archivo en un directorio dado que contiene una determinada cadena (es decir: “folder1” -> “folder2”).

private fun rename(msg: PathRenameMessage): Path {
    val node = msg.node
    val oldPath = node.path
    try {
        return rename(oldPath, msg.strToFind, msg.strToReplace)
    } catch (e: Exception) {
        throw PathNotProcessedException(msg, e)
    }
}

private fun rename(path: Path, strToFind: String, strToReplace: String): Path {
    val newName = path.fileName.toString().replace(strToFind, strToReplace)
    val newPath = path.resolveSibling(newName)
    Files.move(path, newPath, StandardCopyOption.ATOMIC_MOVE)
    return newPath
}

Al principio, comienza a renombrar los archivos correctamente, pero cuando intenta renombrar (usando Files.move) los hijos directos de la raíz del directorio, lanza java.nio.file.AccessDeniedException.

Error log

¿Alguien tiene alguna idea de qué estoy haciendo mal?

EDIT:
La estructura de carpetas en la que estoy probando actualmente esto es:
Filetree

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el programa está enfrentando problemas de permisos cuando intenta cambiar el nombre de los hijos directos del directorio raíz. Esto se debe probablemente al hecho de que estos directorios están protegidos por el sistema operativo y requieren permisos más elevados para ser modificados.

    Una solución sería ejecutar el programa como administrador o con permisos elevados para evitar estas restricciones. Otra solución sería modificar el código para manejar estos directorios de manera diferente y no intentar cambiarles el nombre.

    También cabe destacar que al utilizar el modelo de actores, es útil contar con un manejo de errores para capturar cualquier excepción que pueda ocurrir durante el procesamiento y manejarla de manera adecuada. La excepción PathNotProcessedException que se está lanzando aquí indica que ya hay algún manejo de errores en su lugar, pero puede ser conveniente revisarlo y actualizarlo según sea necesario para asegurarse de que todos los posibles errores estén siendo capturados y manejados correctamente.

Comments are closed.