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

Cet article explique pourquoi ne peut 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 base de connaissances d’origine : 320081

Remarque

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

Vous ne pouvez pas supprimer un fichier si le fichier utilise une liste de Access Control (ACL). Pour résoudre ce problème, modifiez les autorisations sur le fichier. Vous devrez peut-être prendre possession des fichiers pour modifier les autorisations.

Les administrateurs ont implicitement la possibilité de prendre possession de n’importe quel fichier, même s’ils n’ont reçu aucune autorisation explicite sur le fichier. Les propriétaires de fichiers ont la possibilité implicite de modifier les autorisations de fichier, même s’ils ne disposent pas explicitement d’autorisations sur le fichier. Par conséquent, vous devrez peut-être prendre possession d’un fichier, vous accorder des autorisations 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 a une liste de contrôle d’accès non canonique

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

Les entrées Access Control dans une liste de contrôle d’accès ont une séquence préférée en fonction de leur type. Par exemple, les entrées d’accès qui refusent l’accès sont généralement antérieures aux acees qui accordent l’accès. Toutefois, rien n’empêche un programme d’écrire une liste de contrôle d’accès qui a des acees dans n’importe quelle séquence arbitraire. Dans certaines versions antérieures de Windows, des problèmes se sont produits lorsque Windows a essayé de lire ces listes de contrôle d’accès 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 Microsoft Windows Explorer. Ce problème a été corrigé 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 sur place, vous pouvez écrire une nouvelle liste de contrôle d’accès 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 a le handle ouvert, puis fermez ce processus.

Selon la façon dont le fichier est ouvert, vous ne pourrez peut-être pas 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 descripteurs ouverts pour les fichiers quand 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 qui a ouvert le fichier n’a pas libéré le fichier. En outre, vous ne pourrez peut-être pas accéder à la boîte de dialogue Sécurité d’un fichier en attente de suppression. Pour résoudre ce problème, déterminez le processus qui a 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 endommager le système de fichiers et placer les fichiers dans un état problématique :

  • Secteurs incorrects sur le disque
  • Autre matériel défectueux
  • Bogues logiciels

Les opérations classiques peuvent échouer de différentes façons. Lorsque le système de fichiers détecte une corruption, il enregistre un événement dans le journal des événements et vous recevez généralement un message vous invitant à exécuter Chkdsk. Selon la nature de l’altération, Chkdsk peut ou non récupérer des données de fichier. Toutefois, Chkdsk retourne le système de fichiers à un état cohérent en interne.

Cause 4 : Les fichiers existent dans des chemins plus profonds que MAX_PATH caractères

Vous ne pouvez 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 8.3 généré automatiquement pour accéder au fichier

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

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

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

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

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

Par exemple, supposons que vous ayez un chemin qui est 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 d’accès à 73 caractères, mappez 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 des dossiers. Renommez ensuite les dossiers en accédant au partage.

Résolution 5 : Utiliser un outil capable de parcourir des chemins profonds

De nombreux programmes Windows s’attendent à ce que la longueur maximale du chemin d’accès soit inférieure à 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 rencontrer ce problème si vous créez un partage à un moment donné dans votre structure de dossiers qui est déjà assez profonde, puis que vous créez une structure approfondie 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 parcourir l’arborescence entière à partir de la racine. Vous devrez peut-être utiliser ces outils d’une manière spéciale afin qu’ils puissent traverser le partage. La documentation de l’API CreateFile décrit une méthode permettant de parcourir l’arborescence entière dans cette situation.

En règle générale, vous pouvez gérer des fichiers à l’aide du logiciel qui les crée. Si vous avez un programme qui peut 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. Vous pouvez généralement 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é dans l’espace de nom 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 du fichier.

Si vous ouvrez un handle pour un fichier à l’aide du mécanisme CreateFile win32 classique, certains noms de fichiers sont réservés aux appareils DOS de style ancien. Pour la 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. Ce problème n’est pas une limitation de NTFS.

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

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

Vous ne pouvez pas supprimer un fichier si le nom de fichier inclut un nom non valide. Par exemple, le nom de fichier a 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 utiliser 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 la syntaxe Win32 classique pour ouvrir un fichier dont le nom contient des espaces de fin ou des points de fin, les espaces ou points de fin sont supprimés avant l’ouverture du fichier réel. Par exemple, 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 simplement un caractère d’espace et que vous essayez de l’ouvrir à l’aide d’appels Win32 standard, vous ouvrez le dossier parent du fichier à la place. Dans ce cas, si vous essayez de modifier les paramètres de sécurité sur ces fichiers, vous ne pourrez peut-être pas le faire, ou vous pouvez modifier de manière inattendue les paramètres sur différents fichiers. Si ce comportement se produit, vous pouvez penser que vous êtes autorisé à accéder à un fichier qui a en fait une liste de contrôle d’accès restrictive.

Combinaisons de causes

Parfois, vous pouvez rencontrer des combinaisons de ces causes. Cela peut compliquer la procédure de suppression d’un fichier. Par exemple, si vous vous connectez en tant qu’administrateur de l’ordinateur, vous pouvez rencontrer une combinaison de cause 1 (vous ne disposez pas des autorisations pour supprimer un fichier) et 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, il se peut que vous ne puissiez toujours pas supprimer le fichier, car l’éditeur de liste de contrôle d’accès dans 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 sur un fichier autrement inaccessible. Voici un exemple :

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

Remarque

Cette commande est une seule ligne de commande, elle a été encapsulée pour plus de lisibilité.

Cet exemple de ligne de commande modifie le C:\<path_to_problem_file> 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 sur le fichier. Vous pouvez maintenant supprimer ce fichier à l’aide de la commande Del avec la même "\\?\" syntaxe.