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. Il fournit également de l’aide pour résoudre ce problème.

S’applique à :   Windows Server 2012 R2
Numéro de la ko d’origine :   320081

Notes

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

Cause 1 : le fichier utilise une ACL

Vous ne pouvez pas supprimer un fichier si celui-ci utilise une liste de contrôle d’accès (ACL). Pour résoudre ce problème, modifiez les autorisations sur le fichier. Vous de devez peut-être prendre possession des fichiers pour modifier les autorisations.

Les administrateurs ont la possibilité implicite de prendre possession d’un fichier, même s’ils n’ont pas été explicitement autorisés à le faire. Les propriétaires de fichiers ont la possibilité implicite de modifier les autorisations de fichier, même s’ils ne sont pas explicitement autorisés à le faire. Vous de devez donc prendre possession d’un fichier, vous accorder des autorisations pour supprimer le fichier, puis le supprimer.

Vous ne pouvez pas utiliser certains outils de sécurité pour afficher ou modifier des autorisations, car le fichier possède une ACL non canonique

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

Les entrées de contrôle d’accès (ACE) d’une ACL ont une certaine séquence préférée en fonction de leur type. Par exemple, les ace qui refusent l’accès sont généralement avant les ace qui octroient l’accès. Toutefois, rien n’empêche un programme d’écrire une ACL qui possède des ace dans n’importe quel ordre arbitraire. Dans certaines versions antérieures de Windows, des problèmes se produisaient Windows essayaient de lire ces ACA non canoniques. Parfois, vous ne pouvez pas modifier correctement ces ACA à l’aide de l’éditeur de sécurité graphique Microsoft Windows Explorer. Ce problème a été corrigé dans les versions ultérieures de Windows. Si vous faites l’expérience de ce problème, utilisez la version la plus récente de Cacls.exe. Même si vous ne pouvez pas afficher ou modifier une ACL en place, vous pouvez écrire une nouvelle ACL pour accéder au fichier.

Cause 2 : le fichier est utilisé

Vous ne pouvez pas supprimer un fichier si le fichier est utilisé. Pour résoudre ce problème, déterminez le processus qui possède le handle ouvert, puis fermez ce processus.

Selon la façon dont le fichier est ouvert, il se peut que vous ne soyez pas en mesure de supprimer un fichier en cours d’utilisation. Par exemple, le fichier est ouvert pour un accès exclusif au lieu d’un accès partagé. Vous pouvez utiliser différents outils pour déterminer les processus qui ont des dentes ouvertes sur des fichiers lorsque vous le souhaitez.

Les symptômes de ce problème peuvent varier. Vous pouvez utiliser la commande Supprimer pour supprimer un fichier. Toutefois, le fichier n’est pas supprimé tant que le processus ouvert n’a pas libéré le fichier. En outre, il se peut que vous ne soyez pas en mesure d’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 possède le handle ouvert, puis fermez ce processus.

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

Vous ne pouvez 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 éventuelles.

Les raisons suivantes peuvent corrompre le système de fichiers et placer les fichiers dans un état problématique :

  • Secteurs défectueux sur le disque
  • Autres matériels défectueux
  • Bogues logiciels

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 qui vous invite à exécuter Chkdsk. Selon la nature de l’altération, Chkdsk peut ou non récupérer des données de fichier. Toutefois, Chkdsk renvoie le système de fichiers à un état cohérent en interne.

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

Vous ne pouvez pas ouvrir, modifier ou supprimer un fichier en cas de problèmes avec le chemin d’accès du fichier.

Résolution 1 : utiliser un nom 8.3 autogénéré pour accéder au fichier

Pour résoudre ce problème, vous pouvez utiliser le nom 8.3 automatiquement pour accéder au fichier. Cette résolution peut être la résolution la plus simple si le chemin d’accès est profond, car les noms de dossiers sont trop longs. Si le chemin d’accès 8.3 est également trop long ou si 8,3 noms ont été désactivés sur le volume, allez à la résolution 2. Pour plus d’informations sur la désactivation des noms de fichiers 8.3 sur les volumes NTFS, voir Comment désactiver la création de noms 8.3sur les partitions NTFS .

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

Renommons le dossier de sorte que les fichiers cibles qui sont plus profonds qu’il MAX_PATH n’existe plus. Si vous le faites, commencez par le dossier racine ou tout autre emplacement pratique. Renommons ensuite les dossiers afin qu’ils ont des noms plus courts. Si cette étape ne résout pas ce problème, par exemple, si un fichier contient plus de 128 dossiers, allez à la résolution 4.

Résolution 3 : ma map miquer un lecteur à un dossier dans la structure du chemin d’accès

Map to a folder inside the structure of the path of the target file or folder. 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 d’accès, le nombre total de caractères est de plus de 255 caractères. Pour raccourcir la longueur de ce chemin d’accès, à 73 caractères, mapmage d’un lecteur à 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 de dossiers. Renommez ensuite les dossiers en accédant au partage.

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

De Windows programmes s’attendent à ce que la longueur maximale du chemin d’accès soit plus courte que 255 caractères. Ces programmes allouent uniquement suffisamment de stockage interne pour gérer ces chemins d’accès classiques. NTFS n’a pas cette limite et peut contenir des chemins beaucoup plus longs.

Vous pouvez être face à ce problème si vous créez un partage à un moment donné dans votre structure de dossiers déjà assez profond, puis créez une structure profonde en dessous de ce point à l’aide du partage. Certains outils qui fonctionnent localement sur l’arborescence de dossiers peuvent ne pas être en mesure de traverser toute l’arborescence à partir de la racine. Vous de devez peut-être utiliser ces outils d’une manière spéciale pour qu’ils traversent le partage. La documentation de l’API CreateFile décrit une méthode pour parcourir l’arborescence entière 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 avez un programme qui peut créer des fichiers qui sont plus profonds que , vous pouvez généralement utiliser ce même programme pour MAX_PATH supprimer ou gérer les fichiers. Vous pouvez généralement supprimer des fichiers créés sur un partage à l’aide du même partage.

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

Si le nom de fichier inclut un nom réservé dans l’espace de noms Win32, tel que lpt1, vous ne pouvez 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 certaines 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 Win32 CreateFile classique, certains noms de fichiers sont réservés aux anciens périphériques DOS. Pour des raisons de compatibilité ascendante, ces noms de fichiers ne sont pas autorisés et ne peuvent pas être créés à l’aide d’appels de fichiers Win32 classiques. Ce problème n’est pas une limitation de NTFS.

Vous pouvez utiliser un programme Win32 pour contourner les vérifications de nom classiques qui sont réalisées lorsqu’un fichier est créé ou supprimé à l’aide de la même technique que celle utilisée pour parcourir les dossiers plus profondément que MAX_PATH . En outre, certains outils POSIX ne sont pas soumis à ces vérifications de nom.

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

Vous ne pouvez pas supprimer un fichier si le nom de fichier inclut un nom non valide. Par exemple, le nom du fichier possède un espace de fin ou une période de fin, ou le nom de fichier est composé d’un espace uniquement. 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 travailler sur ces fichiers. Voici un exemple :

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

La cause de ce problème est similaire à la cause 4. Si vous utilisez une syntaxe Win32 classique pour ouvrir un fichier qui possède des espaces de fin ou des périodes de fin dans son nom, les espaces ou les périodes de fin sont réduits avant l’ouverture du fichier réel. Par exemple, vous avez deux fichiers dans le même dossier nommé et AFile.txt 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 n’est qu’un espace et que vous essayez de l’ouvrir à l’aide d’appels Win32 standard, vous ouvrez plutôt le dossier parent du fichier. Dans ce cas, si vous essayez de modifier les paramètres de sécurité de ces fichiers, vous risquez de ne pas pouvoir le faire ou de modifier de manière inattendue les paramètres de différents fichiers. Si ce comportement se produit, vous pouvez penser que vous disposez d’autorisations pour un fichier qui possède réellement une ACL restrictive.

Combinaisons de causes

Parfois, vous pouvez faire l’expérience de combinaisons de ces causes. Cela peut rendre la procédure de suppression d’un fichier plus complexe. Par exemple, si vous vous connectez en tant qu’administrateur de l’ordinateur, vous pouvez faire l’expérience d’une combinaison des causes 1 (vous n’êtes pas autorisé à supprimer un fichier) et Cause 5 (le nom du fichier contient un caractère de fin qui redirige 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, il se peut que vous ne soyez toujours pas en mesure de supprimer le fichier, car l’éditeur ACL dans l’interface utilisateur ne peut pas accéder au fichier approprié en raison de cause 6.

Dans ce cas, vous pouvez utiliser l’utilitaire Subinacl avec le commutateur (cet utilitaire est inclus dans le Kit de ressources) pour modifier la propriété et les /onlyfile autorisations d’un fichier inaccessible. Voici un exemple :

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

Notes

Cette commande est une ligne de commande unique qui a été wrapped pour une plus grande lisibilité.

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