Vous ne pouvez pas supprimer un fichier ou un dossier sur un volume de système de fichiers NTFS

Cet article explique pourquoi vous ne pouvez pas supprimer un fichier ou un dossier sur un volume de système de fichiers NTFS, et fournit de l’aide pour résoudre ce problème.

Version du produit d’origine :   Windows Server 2012 R2
Numéro de la base de connaissances initiale :   320081

Notes

En interne, NTFS traite les dossiers comme un type spécial de fichier. Par conséquent, le fichier Word dans cet article indique un fichier ou un dossier.

Cause 1 : le fichier utilise une liste de contrôle d’accès

Il se peut que vous ne puissiez pas supprimer un fichier s’il utilise une liste de contrôle d’accès (ACL). Pour résoudre ce problème, modifiez les autorisations sur le fichier. Vous devrez peut-être prendre possession des fichiers pour pouvoir modifier les autorisations.

Les administrateurs ont la possibilité implicite de prendre possession de n’importe quel fichier même s’ils n’ont pas été explicitement autorisés à accéder au fichier. Les propriétaires de fichiers disposent de la capacité implicite de modifier les autorisations de fichier, même s’ils ne reçoivent pas explicitement d’autorisations sur le fichier. Par conséquent, vous devrez peut-être prendre possession d’un fichier, vous donner les autorisations nécessaires pour supprimer le fichier, puis supprimer le fichier.

Vous ne pouvez pas utiliser certains outils de sécurité pour afficher ou modifier des autorisations car le fichier contient une liste de contrôle d’accès non canonique.

Pour contourner ce problème, utilisez un autre outil (par exemple, une version ultérieure de Cacls.exe).

Les entrées de contrôle d’accès (ACE) d’une liste de contrôle d’accès ont une séquence préférée en fonction de leur type. Par exemple, les ACE qui refusent l’accès sont généralement les ACE qui accordent l’accès. Toutefois, rien n’empêche un programme d’écrire une liste de contrôle d’accès avec des entrées ACE dans n’importe quelle séquence arbitraire. Dans certaines versions antérieures de Windows, des problèmes étaient survenus lorsque Microsoft Windows essayait de lire ces ACL non canoniques. Parfois, vous ne pouvez pas modifier ces listes de Contrã’le d’accès correctement à l’aide de l’éditeur de sécurité graphique de l’Explorateur Windows. Ce problème a été résolu dans les versions ultérieures de Windows. Si vous rencontrez ce problème, utilisez la version la plus récente de Cacls.exe. Même si vous ne pouvez pas afficher ou modifier une liste de contrôle d’accès en place, vous pouvez écrire une nouvelle liste de contrôle d’accès qui vous permet d’accéder au fichier.

Cause 2 : le fichier est en cours d’utilisation

Il se peut que vous ne puissiez pas supprimer un fichier si le fichier est en cours d’utilisation. Pour résoudre ce problème, déterminez le processus qui contient le handle ouvert, puis fermez ce processus.

En fonction de la façon dont le fichier est ouvert (par exemple, s’il est ouvert pour un accès exclusif au lieu d’un accès partagé), il se peut que vous ne puissiez pas supprimer un fichier en cours d’utilisation. Vous pouvez utiliser différents outils pour vous aider à déterminer les processus qui ont des handles ouverts dans des fichiers à tout moment.

Les symptômes de ce problème peuvent varier. Vous pouvez utiliser la commande Delete pour supprimer un fichier, mais le fichier n’est pas supprimé tant que le processus dans lequel le fichier est ouvert ne libère pas le fichier. En outre, il se peut que vous ne puissiez pas accéder à la boîte de dialogue sécurité pour un fichier en attente de suppression. Pour résoudre ce problème, déterminez le processus qui contient le handle ouvert, puis fermez ce processus.

Cause 3 : l’altération du système de fichiers empêche l’accès au fichier.

Il se peut que vous ne puissiez pas supprimer le fichier si le système de fichiers est endommagé. Pour résoudre ce problème, exécutez l’utilitaire chkdsk sur le volume de disque pour corriger les erreurs.

Des secteurs défectueux sur le disque, un matériel défectueux ou des bogues logiciels peuvent endommager le système de fichiers et placer les fichiers dans un état problématique. Les opérations classiques peuvent échouer de différentes manières. Lorsque le système de fichiers détecte une altération, il enregistre un événement dans le journal des événements et vous recevez généralement un message vous invitant à exécuter chkdsk. En fonction de la nature de la corruption, il se peut que CHKDSK ne puisse pas récupérer les données du fichier ; Toutefois, CHKDSK renvoie le système de fichiers à un état cohérent en interne.

Cause 4 : les fichiers existent dans des chemins d’accès plus profonds que MAX_PATH caractères

Il se peut que vous ne puissiez pas ouvrir, modifier ou supprimer un fichier en cas de problème avec le chemin d’accès du fichier.

Résolution 1 : utiliser un nom généré automatiquement 8,3 pour accéder au fichier

Pour résoudre ce problème, vous pouvez utiliser le nom généré automatiquement 8,3 pour accéder au fichier. Cette résolution peut être plus simple si le chemin d’accès est profond car les noms de dossier sont trop longs. Si le chemin d’accès 8,3 est également trop long ou si les noms 8,3 ont été désactivés sur le volume, passez à la résolution 2. Pour plus d’informations sur la désactivation des noms de fichiers 8,3 sur des volumes NTFS, consultez la rubrique How to Disable the 8,3 Name Creation on partitions NTFS.

Résolution 2 : renommer ou déplacer un dossier profond

Renommez le dossier de sorte que les fichiers cibles qui sont plus profonds que le MAX_PATH n’existent plus. Dans ce cas, commencez par le dossier racine (ou tout autre emplacement pratique), puis renommez les dossiers de manière à ce qu’ils aient des noms plus courts. Si cette étape ne résout pas le problème (par exemple, si un fichier comporte plus de 128 dossiers en profondeur), passez à la résolution 4.

Résolution 3 : mapper un lecteur sur un dossier dans la structure du chemin d’accès

Mappez un lecteur sur un dossier à l’intérieur de la structure du chemin d’accès du fichier ou du dossier cible. Cette méthode raccourcit le chemin d’accès virtuel.

Par exemple, supposons que vous avez un chemin d’accès structuré comme suit :

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

Dans ce chemin, le nombre total de caractères est supérieur à 255 caractères. Pour raccourcir la longueur de ce chemin, à 73 caractères, mappez un lecteur sur SubfolderName4.

Résolution 4 : utiliser un partage réseau aussi profond que le dossier

Si les résolutions 1, 2 et 3 ne sont pas pratiques ou ne résolvent pas le problème, créez un partage réseau aussi profond que possible dans l’arborescence des dossiers, puis renommez les dossiers en accédant au partage.

Résolution 5 : utiliser un outil capable de traverser des chemins d’accès profonds

De nombreux programmes Windows attendent que la longueur maximale du chemin soit inférieure à 255 caractères. Par conséquent, ces programmes allouent suffisamment d’espace de stockage interne pour gérer ces chemins d’accès classiques. NTFS n’a pas cette limite et peut contenir des chemins d’accès plus longs.

Vous pouvez être confronté à ce problème si vous créez un partage à un moment donné de votre structure de dossiers qui est déjà assez profond, puis créez une structure profonde sous ce point à l’aide du partage. Certains outils qui fonctionnent localement sur l’arborescence des dossiers peuvent ne pas être en mesure de traverser toute l’arborescence en commençant à la racine. Vous devrez peut-être utiliser ces outils de manière spéciale afin qu’ils puissent parcourir le partage. (La documentation de l’API CreateFile décrit une méthode pour parcourir l’ensemble de l’arborescence dans cette situation.)

En règle générale, vous pouvez gérer les fichiers à l’aide du logiciel qui les crée. Si vous disposez d’un programme capable de créer des fichiers plus profonds que MAX_PATH , vous pouvez généralement utiliser ce même programme pour supprimer ou gérer les fichiers. En règle générale, vous pouvez supprimer des fichiers créés sur un partage à l’aide du même partage.

Cause 5 : le nom de fichier inclut un nom réservé dans l’espace de noms Win32

Si le nom de fichier inclut un nom réservé (par exemple, LPT1) dans l’espace de noms Win32, il se peut que vous ne puissiez pas supprimer le fichier. Pour résoudre ce problème, utilisez un programme non-Win32 pour renommer le fichier. Vous pouvez utiliser un outil POSIX ou tout autre outil qui utilise la syntaxe interne appropriée pour utiliser le fichier.

En outre, vous pouvez utiliser des commandes intégrées pour contourner les vérifications de nom réservé Win32 classiques si vous utilisez une syntaxe particulière pour spécifier le chemin d’accès du fichier.

Si vous ouvrez un handle vers un fichier à l’aide du mécanisme CreateFile Win32 standard, certains noms de fichiers sont réservés aux appareils DOS de style ancien. Pour des raisons de compatibilité descendante, ces noms de fichiers ne sont pas autorisés et ne peuvent pas être créés à l’aide d’appels de fichiers Win32 classiques. Toutefois, ce problème n’est pas une limitation de NTFS.

Vous pouvez utiliser un programme Win32 pour contourner les vérifications de nom standard effectuées lors de la création (ou suppression) d’un fichier à l’aide de la même technique que celle utilisée pour parcourir les dossiers qui sont plus profonds que MAX_PATH . En outre, certains outils POSIX ne sont pas soumis à ces contrôles de nom.

Cause 6 : le nom de fichier inclut un nom non valide dans l’espace de noms Win32

Il se peut que vous ne puissiez pas supprimer un fichier si le nom de fichier inclut un nom non valide (par exemple, le nom de fichier comporte un espace de fin ou un point de fin ou le nom de fichier est composé uniquement d’un espace). Pour résoudre ce problème, utilisez un outil qui utilise la syntaxe interne appropriée pour supprimer le fichier. Vous pouvez utiliser la "\\?\" syntaxe avec certains outils pour fonctionner sur ces fichiers, par exemple :

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

La cause de ce problème est similaire à la cause 4. Toutefois, si vous utilisez une syntaxe Win32 classique pour ouvrir un fichier dont le nom comporte des espaces de fin ou des points de suite, les espaces de fin ou les points sont supprimés avant l’ouverture du fichier réel. Par conséquent, si vous avez deux fichiers dans le même dossier nommé AFile.txt et AFile.txt (Notez l’espace après le nom de fichier), si vous essayez d’ouvrir le deuxième fichier à l’aide d’appels Win32 standard, vous ouvrez le premier fichier à la place. De même, si vous avez un fichier dont le nom est un espace et que vous essayez de l’ouvrir à l’aide d’appels Win32 standard, vous devez ouvrir le dossier parent du fichier. Dans ce cas, si vous tentez de modifier les paramètres de sécurité de ces fichiers, il se peut que vous ne soyez pas en mesure de le faire ou que vous puissiez modifier les paramètres de manière inattendue sur des fichiers différents. Si ce problème se produit, vous pouvez penser que vous disposez d’une autorisation sur un fichier qui a en réalité une liste de contrôle d’accès restrictive.

Combinaisons de causes

Parfois, vous pouvez être confronté à des combinaisons de ces causes, qui peuvent faire en sorte que la procédure de suppression d’un fichier soit plus complexe. Par exemple, si vous ouvrez une session en tant qu’administrateur de l’ordinateur, vous pouvez rencontrer une combinaison de cause 1 (vous ne disposez pas des autorisations nécessaires pour supprimer un fichier) et la cause 5 (le nom de fichier contient un caractère de fin qui entraîne la redirection de l’accès au fichier vers un fichier différent ou inexistant) et vous ne pouvez pas supprimer le fichier. Si vous essayez de résoudre la cause 1 en prenant possession du fichier et en ajoutant des autorisations, vous risquez de ne pas pouvoir supprimer le fichier, car l’éditeur ACL de l’interface utilisateur ne peut pas accéder au fichier approprié en raison de la cause 6.

Dans ce cas, vous pouvez utiliser l’utilitaire Subinacl avec le /onlyfile commutateur (cet utilitaire est inclus dans le kit de ressources) pour modifier la propriété et les autorisations d’un fichier qui n’est pas accessible par ailleurs, par exemple :

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

Notes

Cette commande est une seule ligne de commande qu’elle a été raccourcie pour des raisons de lisibilité.

Cet exemple de ligne de commande modifie le C:\<path_to_problem_file> fichier qui contient un espace de fin de manière à ce que le compte domaine\administrateur soit le propriétaire du fichier et que ce compte dispose d’un contrôle total sur le fichier. Vous pouvez maintenant supprimer ce fichier à l’aide de la commande del avec la même "\\?\" syntaxe.