En un sistema de archivos Windows NTFS, tengo un archivo (por ejemplo, orig.mp3
). Abro este archivo, a través de esta ruta orig.mp3
, de tal manera que esté en uso (digamos, reproduciéndolo en VLC).
Luego creo un enlace duro ( cmd /c mklink /h link.mp3 orig.mp3
). Esto da como resultado dos rutas NTFS que apuntan exactamente al mismo archivo.
Finalmente trato de eliminar el archivo vinculado nuevamente ( del link.mp3
o eliminarlo en el Explorador de Windows).
Esto falla con un error: "El proceso no puede acceder al archivo porque otro proceso lo está utilizando".
¿Por qué? Y lo más importante: ¿cómo puedo evitar esto (además de asegurarme de que ningún proceso tenga el archivo original en uso)? ¿Puedo decirle a Windows que haga una 'eliminación retardada' para que el archivo vinculado se elimine automáticamente cuando el original ya no esté en uso?
Respuestas:
Este es un comportamiento bastante esperado, el enlace duro es solo otro nombre para el mismo archivo. Por ejemplo, si tiene el archivo A.PDF, cree el enlace rígido B.PDF al mismo archivo, no importa si el archivo se abre con el nombre A.PDF o B.PDF; sigue siendo el mismo archivo, así que si este archivo simplemente se abre, no puede eliminar ninguno de los enlaces.
La razón real es que el nombre se almacena como un atributo en el registro de archivo de la tabla del archivo maestro (en el caso de NTFS) y, dado que el archivo está abierto, no puede eliminar ninguno de los enlaces (no puede modificar el archivo abierto).
En este caso no hay nada como el archivo original, ya que ambos nombres pertenecen al mismo archivo (y al único) y ambos nombres son iguales. El archivo se elimina realmente cuando el recuento de enlaces llega a cero.
fuente
Use la herramienta FSUTIL para mantener los enlaces simbólicos de forma segura.
http://technet.microsoft.com/en-ca/library/cc753059.aspx
eliminaría el enlace duro mientras se conserva orig.mp3
fuente
Error: The process cannot access the file because it is being used by another process.
Como se detalla en la respuesta de Robert Goldwein , dicho enlace duro no se puede eliminar mientras el archivo está en uso. Sin embargo, resulta posible una eliminación retrasada.
El comentario de Damon sobre esta pregunta sugiere usar movefile de la Suite Sysinternals.
En mi caso, donde quiero hacer esto desde PowerShell, puedo usar Lee Holmes para que Windows elimine el archivo en el próximo arranque.
Move-LockedFile
link.mp3 $null
Los dos anteriores utilizan la función Win32 MoveFileEx con el indicador MOVEFILE_DELAY_UNTIL_REBOOT .
Actualización: consulte https://gist.github.com/marnix/7565364 para obtener información
Remove-File-Eventually
que acabo de piratear. Sin garantías :-)fuente