No se puede eliminar un archivo o una carpeta en un volumen del sistema de archivos NTFS

En este artículo se describe por qué no se puede eliminar un archivo o una carpeta en un volumen del sistema de archivos NTFS. También proporciona ayuda para resolver este problema.

Se aplica a: Windows Server 2012 R2
Número de KB original: 320081

Nota:

Internamente, NTFS trata las carpetas como un tipo especial de archivo. Por lo tanto, el archivo de palabra de este artículo indica un archivo o una carpeta.

Causa 1: El archivo usa una ACL

No se puede eliminar un archivo si el archivo usa una lista de Access Control (ACL). Para resolver este problema, cambie los permisos del archivo. Es posible que tenga que tomar posesión de los archivos para cambiar los permisos.

Los administradores tienen la capacidad implícita de tomar posesión de cualquier archivo, incluso si no se les ha concedido explícitamente ningún permiso para el archivo. Los propietarios de archivos tienen la capacidad implícita de modificar los permisos de archivo, incluso si no se les concede explícitamente ningún permiso para el archivo. Por lo tanto, es posible que tenga que tomar posesión de un archivo, concederse permisos para eliminar el archivo y, a continuación, eliminar el archivo.

No puede usar ciertas herramientas de seguridad para mostrar o modificar permisos porque el archivo tiene una ACL no canónica.

Para solucionar este problema, use otra herramienta (por ejemplo, una compilación posterior de Cacls.exe).

Las entradas de Access Control (ACE) de una ACL tienen una secuencia preferida en función de su tipo. Por ejemplo, las ACE que deniegan el acceso suelen estar antes que las ACE que conceden acceso. Sin embargo, nada impide que un programa escriba una ACL que tenga ACE en ninguna secuencia arbitraria. En algunas versiones anteriores de Windows, se produjeron problemas cuando Windows intentó leer estas ACL no canónicas. En ocasiones, estas ACL no se pueden modificar correctamente mediante el editor gráfico de seguridad del Explorador de Microsoft Windows. Este problema se ha corregido en versiones posteriores de Windows. Si experimenta este problema, use la versión más reciente de Cacls.exe. Incluso si no puede mostrar o editar una ACL en su lugar, puede escribir una nueva ACL para obtener acceso al archivo.

Causa 2: Se usa el archivo

No se puede eliminar un archivo si se usa el archivo. Para resolver este problema, determine el proceso que tiene el identificador abierto y, a continuación, cierre ese proceso.

En función de cómo se abra el archivo, es posible que no pueda eliminar un archivo que esté en uso. Por ejemplo, el archivo está abierto para el acceso exclusivo en lugar de para el acceso compartido. Puede usar varias herramientas para determinar los procesos que tienen identificadores abiertos en los archivos siempre que lo desee.

Los síntomas de este problema pueden variar. Puede usar el comando Eliminar para eliminar un archivo. Pero el archivo no se elimina hasta que el proceso que tiene el archivo abierto libera el archivo. Además, es posible que no pueda acceder al cuadro de diálogo Seguridad de un archivo que esté pendiente de eliminación. Para resolver este problema, determine el proceso que tiene el identificador abierto y, a continuación, cierre ese proceso.

Causa 3: Los daños en el sistema de archivos impiden el acceso al archivo

No puede eliminar el archivo si el sistema de archivos está dañado. Para resolver este problema, ejecute la utilidad Chkdsk en el volumen de disco para corregir los errores.

Las siguientes razones pueden dañar el sistema de archivos y poner los archivos en un estado problemático:

  • Sectores incorrectos en el disco
  • Otro hardware defectuoso
  • Errores de software

Las operaciones típicas pueden producir errores de varias maneras. Cuando el sistema de archivos detecta daños, registra un evento en el registro de eventos y normalmente recibe un mensaje que le pide que ejecute Chkdsk. En función de la naturaleza de los daños, Chkdsk puede recuperar o no los datos del archivo. Sin embargo, Chkdsk devuelve el sistema de archivos a un estado coherente internamente.

Causa 4: Los archivos existen en rutas de acceso más profundas que MAX_PATH caracteres

No puede abrir, editar ni eliminar un archivo si hay problemas con la ruta de acceso del archivo.

Resolución 1: Uso de un nombre generado automáticamente 8.3 para acceder al archivo

Para resolver este problema, es posible que quiera usar el nombre 8.3 generado automáticamente para acceder al archivo. Esta resolución puede ser la resolución más fácil si la ruta de acceso es profunda porque los nombres de carpeta son demasiado largos. Si la ruta de acceso 8.3 también es demasiado larga o si se han deshabilitado los nombres 8.3 en el volumen, vaya a Resolución 2. Para obtener más información sobre cómo deshabilitar los nombres de archivo 8.3 en volúmenes NTFS, vea Cómo deshabilitar la creación de nombres 8.3 en particiones NTFS.

Resolución 2: Cambiar el nombre o mover una carpeta profunda

Cambie el nombre de la carpeta para que los archivos de destino que son más profundos que el MAX_PATH ya no existan. Si lo hace, comience en la carpeta raíz o en cualquier otro lugar conveniente. A continuación, cambie el nombre de las carpetas para que tengan nombres más cortos. Si este paso no resuelve este problema, por ejemplo, si un archivo tiene más de 128 carpetas en profundidad, vaya a Resolución 4.

Resolución 3: Asignación de una unidad a una carpeta en la estructura de la ruta de acceso

Asigne una unidad a una carpeta dentro de la estructura de la ruta de acceso del archivo o carpeta de destino. Este método acorta la ruta de acceso virtual.

Por ejemplo, supongamos que tiene una ruta de acceso estructurada de la siguiente manera:

\\ServerName\SubfolderName1\SubfolderName2\SubfolderName3\SubfolderName4\...

En esta ruta de acceso, el número total de caracteres es superior a 255 caracteres. Para acortar la longitud de esta ruta de acceso, a 73 caracteres, asigne una unidad a SubfolderName4.

Resolución 4: Usar un recurso compartido de red que sea tan profundo como la carpeta

Si las resoluciones 1, 2 y 3 no son convenientes o no resuelven el problema, cree un recurso compartido de red lo más profundo posible en el árbol de carpetas. A continuación, cambie el nombre de las carpetas accediendo al recurso compartido.

Resolución 5: Usar una herramienta que pueda recorrer rutas de acceso profundas

Muchos programas de Windows esperan que la longitud máxima de la ruta de acceso sea inferior a 255 caracteres. Estos programas solo asignan suficiente almacenamiento interno para controlar estas rutas de acceso típicas. NTFS no tiene este límite y puede contener rutas de acceso mucho más largas.

Puede experimentar este problema si crea un recurso compartido en algún momento en la estructura de carpetas que ya es bastante profunda y, a continuación, crea una estructura profunda debajo de ese punto mediante el recurso compartido. Es posible que algunas herramientas que funcionan localmente en el árbol de carpetas no puedan recorrer todo el árbol a partir de la raíz. Es posible que tenga que usar estas herramientas de una manera especial para que puedan recorrer el recurso compartido. En la documentación de la API CreateFile se describe un método para recorrer todo el árbol en esta situación.

Normalmente, puede administrar archivos mediante el software que los crea. Si tiene un programa que puede crear archivos más profundos que MAX_PATH, normalmente puede usar ese mismo programa para eliminar o administrar los archivos. Normalmente, puede eliminar archivos creados en un recurso compartido mediante el mismo recurso compartido.

Causa 5: El nombre de archivo incluye un nombre reservado en el espacio de nombres de Win32

Si el nombre de archivo incluye un nombre reservado en el espacio de nombres de Win32, como lpt1, no puede eliminar el archivo. Para resolver este problema, use un programa que no sea win32 para cambiar el nombre del archivo. Puede usar una herramienta POSIX o cualquier otra herramienta que use la sintaxis interna adecuada para usar el archivo.

Además, puede usar algunos comandos integrados para omitir las comprobaciones típicas de nombres reservados de Win32 si usa una sintaxis determinada para especificar la ruta de acceso del archivo.

Si abre un identificador en un archivo mediante el mecanismo CreateFile de Win32 típico, determinados nombres de archivo se reservan para dispositivos DOS de estilo antiguo. Por compatibilidad con versiones anteriores, estos nombres de archivo no se permiten y no se pueden crear mediante llamadas de archivo Win32 típicas. Este problema no es una limitación de NTFS.

Puede usar un programa Win32 para omitir las comprobaciones de nombres típicas que se realizan cuando se crea o elimina un archivo mediante la misma técnica que se usa para recorrer carpetas más profundas que MAX_PATH. Además, algunas herramientas POSIX no están sujetas a estas comprobaciones de nombres.

Causa 6: El nombre de archivo incluye un nombre no válido en el espacio de nombres de Win32

No se puede eliminar un archivo si el nombre de archivo incluye un nombre no válido. Por ejemplo, el nombre de archivo tiene un espacio final o un punto final, o el nombre de archivo se compone solo de un espacio. Para resolver este problema, use una herramienta que use la sintaxis interna adecuada para eliminar el archivo. Puede usar la "\\?\" sintaxis con algunas herramientas para trabajar en estos archivos. Aquí le mostramos un ejemplo:

del "\\?\c:\<path_to_file_that contains a trailing space.txt>"

La causa de este problema es similar a la causa 4. Si usa la sintaxis típica de Win32 para abrir un archivo que tiene espacios finales o puntos finales en su nombre, los espacios o puntos finales se quitan antes de que se abra el archivo real. Por ejemplo, tiene dos archivos en la misma carpeta denominados AFile.txt y AFile.txt , anote el espacio después del nombre de archivo. Si intenta abrir el segundo archivo mediante llamadas Win32 estándar, abra el primer archivo en su lugar. Del mismo modo, si tiene un archivo cuyo nombre es solo un carácter de espacio e intenta abrirlo mediante llamadas Win32 estándar, abra la carpeta primaria del archivo en su lugar. En esta situación, si intenta cambiar la configuración de seguridad de estos archivos, es posible que no pueda hacerlo o que cambie inesperadamente la configuración en archivos diferentes. Si se produce este comportamiento, puede pensar que tiene permiso para un archivo que realmente tiene una ACL restrictiva.

Combinaciones de causas

A veces, puede experimentar combinaciones de estas causas. Puede hacer que el procedimiento para eliminar un archivo sea más complejo. Por ejemplo, si inicia sesión como administrador del equipo, puede experimentar una combinación de causa 1 (no tiene permisos para eliminar un archivo) y causa 5 (el nombre de archivo contiene un carácter final que hace que el acceso a archivos se redirija a un archivo diferente o inexistente) y no puede eliminar el archivo. Si intenta resolver la causa 1 tomando la propiedad del archivo y agregando permisos, es posible que todavía no pueda eliminar el archivo, ya que el editor de ACL de la interfaz de usuario no puede acceder al archivo adecuado debido a la causa 6.

En esta situación, puede usar la utilidad Subinacl con el /onlyfile modificador (esta utilidad se incluye en el Kit de recursos) para cambiar la propiedad y los permisos en un archivo que, de lo contrario, no es accesible. Aquí le mostramos un ejemplo:

subinacl /onlyfile "\\?\c:\<path_to_problem_file>" /setowner= domain\administrator /grant= domain\administrator=F

Nota:

Este comando es una sola línea de comandos que se ha ajustado para mejorar la legibilidad.

Esta línea de comandos de ejemplo modifica el C:\<path_to_problem_file> archivo que contiene un espacio final para que la cuenta de dominio\administrador sea el propietario del archivo y esta cuenta tenga control total sobre el archivo. Ahora puede eliminar este archivo mediante el comando Del con la misma "\\?\" sintaxis.