Sur un système de fichiers Windows NTFS, j'ai un fichier (disons orig.mp3
). J'ouvre ce fichier, par ce chemin orig.mp3
, de telle manière qu'il est utilisé (disons, en le lisant dans VLC).
Ensuite, je crée un lien dur ( cmd /c mklink /h link.mp3 orig.mp3
). Il en résulte deux chemins NTFS pointant vers exactement le même fichier.
Enfin, j'essaie de supprimer à nouveau le fichier lié ( del link.mp3
, ou supprimer dans l'Explorateur Windows).
Cela échoue avec une erreur: "Le processus ne peut pas accéder au fichier car il est utilisé par un autre processus."
Pourquoi? Et plus important encore: comment puis-je éviter cela (en dehors de m'assurer qu'aucun processus n'a le fichier d'origine en cours d'utilisation)? Puis-je peut-être dire à Windows de faire une «suppression différée», afin que le fichier lié soit automatiquement supprimé lorsque l'original n'est plus utilisé?
Réponses:
C'est un comportement très attendu, le lien dur est juste un autre nom pour le même fichier. Par exemple, si vous avez un fichier A.PDF, créez un lien dur B.PDF vers le même fichier, peu importe si le fichier est ouvert sous le nom A.PDF ou B.PDF - c'est toujours le même fichier, donc si ce fichier est simplement ouvert, vous ne pouvez supprimer aucun des liens.
La raison réelle est que le nom est stocké en tant qu'attribut dans l'enregistrement de fichier de la table de fichiers maîtres (dans le cas de NTFS) et puisque le fichier est ouvert, vous ne pouvez supprimer aucun des liens (vous ne pouvez pas modifier le fichier ouvert).
Dans ce cas, rien de tel que le fichier d'origine, car les deux noms appartiennent au même (et le seul) fichier et les deux noms sont égaux. Le fichier est réellement supprimé lorsque le nombre de liens atteint zéro.
la source
Utilisez l'outil FSUTIL pour gérer les liens symboliques en toute sécurité.
http://technet.microsoft.com/en-ca/library/cc753059.aspx
supprimerait le lien dur tout en préservant orig.mp3
la source
Error: The process cannot access the file because it is being used by another process.
Comme détaillé dans la réponse de Robert Goldwein , un tel lien dur ne peut pas être supprimé lorsque le fichier est en cours d'utilisation. Cependant, une suppression différée s'avère possible.
Le commentaire de Damon sur cette question suggère d'utiliser le fichier de déplacement de la suite Sysinternals.
Dans mon cas, où je veux le faire à partir de PowerShell, je peux utiliser celui de Lee Holmes , pour que Windows supprime le fichier au prochain démarrage.
Move-LockedFile
link.mp3 $null
Les deux ci-dessus utilisent la fonction Win32 MoveFileEx avec l' indicateur MOVEFILE_DELAY_UNTIL_REBOOT .
Mise à jour: Voir https://gist.github.com/marnix/7565364 pour un
Remove-File-Eventually
que je viens de pirater. Aucune garantie. :-)la source