Astuces pour
effacer fichier/dossier récalcitrant (Réagir sur le
sujet)
Préambule : ce sujet n'a pas la
prétention de résoudre tous les problèmes de ce genre. Il s'avère que
certains fichiers sont tenaces et que des OS ne lâchent pas facilement le
morceau, en particulier si on a un fichier qui a été créé avec un autre OS
non-MS et qui porte un nom réservé comme LPT1, COM1, AUX, CON (ce n'est
pas une insulte ). Si on a un disque en NTFS, ça peut aussi
compliquer les choses. Ce sont parfois des bugs qui empêchent l'effacement
(voir les fichiers .avi sous XP : http://a.vouillon.free.fr/faq-winxp.htm#115 ).
Mais je pense que si vous essayez les méthodes décrites, il y a de
fortes chances que vous soyez quitte de votre fichier.
Je vois
souvent qu'on propose comme solution de vérifier les attributs du fichier
(lecture seule, système). Sachez qu'en aucun cas, ce n'est un obstacle à
sa suppression ! La seule chose, c'est que Windows va vous prévenir que
vous allez supprimer un fichier caché/système/en lecture seule. Ce n'est
donc pas le fait de décocher les cases qui résoudra le problème. Si
vous essayez de supprimer un dossier et que vous avez un message d'erreur,
ce n'est probablement pas le dossier lui-même qui est le problème mais un
ou plusieurs fichiers du dossier. La solution consiste à effacer les
fichiers de ce dossier un par un jusqu'au moment où on tombe sur celui qui
pose problème.
Le mode sans échec permet déjà de résoudre
pas mal de cas, il est probable que le fichier bloqué en temps normal ne
le soit pas en mode sans échec. Pour démarrer celui-ci, il y a plusieurs
manières en fonction de l'OS, par exemple, maintenir la touche CTRL
enfoncée pendant que le PC démarre. Ensuite, un menu apparaît, permettant
de le choisir. L'aide de Windows vous aidera, tapez simplement "mode sans
échec" à l'onglet "index". Voici ce que ça dit chez moi
:
Cliquez sur Démarrer, puis sur Arrêter. Cliquez sur
Redémarrer, sur OK, puis appuyez sur la touche CTRL en la maintenant
enfoncée jusqu'à ce que le Menu de démarrage de Microsoft Windows 98
apparaisse. Sur certaines machines, vous pouvez utiliser la touche F8
au lieu de CTRL pour afficher le Menu de démarrage de Microsoft Windows
98.
La solution la plus simple pour effacer un fichier est
d'utiliser Explorer. Quoique. Personnellement, je ne fais aucune confiance
en ce programme car MS a pris pour habitude de ne pas montrer le contenu
REEL des répertoires depuis la sortie de Win95 et ça s'aggrave avec XP. Je
conseille d'utiliser Total Commander (TC), le meilleur gestionnaire
de fichiers, multilingue, aucune crasse dans la BdR, shareware sans
limitation. A télécharger ici : http://www.ghisler.com/accueil.htm
Que vous
utilisiez Explorer, Total Commander ou un autre gestionnaire de fichiers,
il vaut mieux s'assurer que l'option "afficher fichiers cachés et système"
soit cochée. Allez dans le répertoire où se trouve le fichier en question.
(voir ci-dessous ce qui est à faire si c'est un programme en cours
d'exécution qui doit être supprimé). Essayez de renommer le fichier ou de
le déplacer dans un autre répertoire. Si jamais le répertoire lui-même est
à liquider également mais qu'il contient un fichier récalcitrant, renommez
le répertoire. C'est l'astuce que je préconise pour liquider les
index.dat, voir mon sujet dans ma signature (Historique IE). En général,
ça ne se pose pas de problème. Ce n'est pas pour ça que le fichier est
supprimable, il faut en effet redémarrer Windows afin que le processus qui
"locke" le fichier ne le retrouve plus.
S'il n'est pas possible de
renommer le répertoire (parce qu'il contient d'autres fichiers à
conserver, par exemple), il faut alors essayer dans une boîte DOS. -
Sous 9X/ME, ouvrez une boîte DOS et allez dans le répertoire en question.
Si jamais vous ne vous en sortez pas avec les CD (change directory),
utilisez Total Commander qui a une fonction ouvrant une boîte DOS dans le
répertoire courant via le menu "Commandes" -> "Fenêtre DOS". Essayez
maintenant en tapant DEL "le nom de votre fichier". Si le nom contient des
espaces, vous devrez entourer le nom de guillemets.
- Sous XP/2K,
faites Démarrer -> Exécuter -> cmd Dans la boîte qui s'ouvre,
faites DEL "le nom du fichier". Assurez-vous que vous avez les droits sur
le fichier, ça peut être une des raisons de l'impossibilité de
l'effacement. Pour effacer un répertoire, faire RD répertoire
/S
Une autre astuce pour supprimer un fichier sous XP, c'est en
anglais.
http://www.dougknox.com/xp/tips/xp_undeletable_file.htm
Voici
la traduction :
- Lancer une ligne de commande (Démarrer ->
Exécuter -> cmd). Laisser la fenêtre ouverte (pas celle de la pièce où
vous êtes, celle de la ligne de commande ). - Arrêter tous les
programmes. - Ouvrir le gestionnaire de tâches (par CTRL+alt+suppr)
-> onglet Processus. - Sélectionner Explorer.exe . - Appuyer sur
le bouton "Terminer le processus". - Confirmer la fin du processus dans
la fenêtre qui s'ouvre. - Laisser la fenêtre du gestionnaire de tâches
ouverte. - Retourner dans la fenêtre de la ligne de commande et aller
dans le répertoire qui contient le fichier récalcitrant. Ça se fait via
une commande cd "le nom du répertoire". Si c'est un répertoire qui est
"profond", c'est-à-dire qu'il est un sous-sous-répertoire, faites le cd en
plusieurs fois, par exemple, "cd \program files" (notez les guillemets à
cause de l'espace), puis, cd "Microsoft Office", puis cd Modèles,
etc. - Une fois que vous êtes dans le répertoire avec le fichier à
supprimer, vous pouvez taper dir "le nom du fichier", il devrait
apparaître. Si vous ne le voyez pas, c'est qu'il a peut-être un attribut
système ou caché ou alors, vous n'êtes pas dans le bon répertoire. -
Ensuite, taper del "le nom du fichier" - Retourner dans le gestionnaire
de tâches - Menu Fichier -> Nouvelle tâche, taper EXPLORER dans le
champ. - Fermer le gestionnaire de tâches
Ce procédé ne
fonctionnera pas pour toutes les situations mais il est encore
relativement simple à essayer.
Pour les fichiers contenant un
caractère exotique, voici ce que propose Vouillon (voir lien au début du
sujet)
* Il y a aussi l'astuce du codage du nom de
fichier/répertoire. Symptôme: Vous ne pouvez ni supprimer, ni renommer
le fichier/répertoire. En insérant un caractère codé qui produit un
espace à l'affichage, XP peut être trompé et la plupart des utilitaires ne
fonctionnent pas. Un moyen simple consiste à travailler en invite de
commandes avec le nom de fichier court. La commande 'dir /X' affiche les
noms courts des fichiers/répertoires.
En parcourant un autre
forum, je suis tombé sur un cas spécifique à XP. Un utilisateur ne
parvenait pas à supprimer un dossier qu'il venait de créer via un logiciel
de transfert entre un appareil photo numérique et son PC. La solution est
simple mais radicale, il a restauré son système a une date antérieure au
problème, avant que le répertoire ne soit créé. C'est donc une
solution à envisager pour XP/ME, restaurer le système à une date
antérieure, pour autant qu'on mesure toutes les conséquences de cette
restauration. C'est peut-être la dernière solution à envisager quand
toutes les autres ont échoué. J'ai déjà constaté que certaines
personnes disent avoir dû redémarrer XP plusieurs fois pour résoudre un
problème. C'est aussi une possibilité à prendre en compte pour se
débarrasser de fichier(s)/dossier(s) récalcitrants.
- Il y a encore
d'autres astuces : lancer le bloc-notes et ouvrir n'importe quel fichier
texte. Puis, vous faites Fichier -> "Enregistrer sous..." et comme nom
de fichier, vous indiquez le fameux fichier bloqué. Ainsi, son contenu est
remplacé par autre chose et ça peut permettre l'effacement.
Cas
particulier : le fichier contient un caractère spécial qui empêche qu'on
tape son nom.
Un petit coup de Scandiskw pourrait régler le
problème, j'ai eu le cas avec un fichier dont le nom contenait des
caractères très spéciaux. Impossible de le supprimer sous Win, en DOS,
etc., même la suppression du répertoire où il se trouvait ne donnait rien.
Finalement, Scandiskw a résolu le problème car il analyse les répertoires
à la recherche de fichiers au contenu ou au nom corrompus. Il propose
alors d'effacer le fichier, ce qui règle le problème. J'ai déjà réussi
à supprimer un fichier en cours d'utilisation en lançant un defrag ! Il
s'agissait du fichier journal créé lors de la connexion à Internet et qui
indique les caractères envoyés par le modem, le nombre de minutes de
connexion, etc. Quand je me déconnecte, je supprime ce fichier mais pour
une raison mystérieuse, il est parfois "locked" alors qu'il n'y a plus
aucun programme en mémoire à part Explorer et SysTray. Il suffit de
redémarrer Windows pour l'effacer. Un peu par hasard, je suis tombé sur
une solution ne nécessitant pas le redémarrage : la défragmentation.
Voici comment faire : lancer Explorer (ou TC), allez dans le
répertoire avec le fichier récalcitrant. Puis, lancer la défragmentation
(Démarrer -> Exécuter -> defrag). Dès qu'elle a commencé, retournez
dans le gestionnaire de fichiers et essayez de supprimer le fichier tout
en laissant tourner la défragmentation. Dans le cas précis que je cite, ça
marche mais je ne garantis pas que ce sera le cas pour d'autres
fichiers. Dans le cas où le fichier a un nom à rallonge que vous
n'arrivez pas à supprimer, TC vient encore une fois à votre secours avec
une option intéressante mais dangereuse, à n'utiliser donc que
temporairement. Il s'agit de l'option "Utiliser les noms longs" qui est
bien sûr cochée par défaut. Si vous la décochez temporairement, votre nom
à rallonge va devenir un nom en 8 caractères plus (éventuellement) 3
d'extension et vous pourrez sans doute le supprimer. N'oubliez pas de
cocher la case à nouveau après la manip. Elle se trouve dans le menu
"Options" -> "Configuration" -> onglet "Opération" -> cadre
"spécifique de Win95/NT". On pourra aussi le traiter avec CopyLock dont
je parle plus loin.
Si c'est un programme que
vous voulez effacer, c'est impossible s'il tourne car il se trouve en
mémoire. En fonction du système d'exploitation, il faut vérifier s'il
tourne et l'arrêter.
Pour Win9x/ME, utiliser Wintop de MS, à
télécharger ici :
http://www.autourdupc.com/Logiciel/Utils/Softs/W95KRNLTOYS.EXE
ou
ici : http://www.clubic.com/t/gen/fl1967.html (55
KB)
Pour 2K/XP, CTRL+ALT+DEL, puis onglet "processus". Quand
vous avez repéré le programme, sélectionnez-le et cliquer sur "fin de
tâche". Normalement, il devrait s'arrêter. Il arrive en effet que
certains programmes restent bloqués en mémoire, il faut parfois utiliser
d'autres méthodes pour "tuer" une tâche. Wintop a une option pour le
faire, sinon, différents logiciels le permettent comme EndItAll ou
TaskInfo. Si le programme en question était un virus ou un spyware, ce
n'est peut-être pas suffisant de l'effacer une fois qu'on l'a éjecté de la
mémoire. Il vaudrait mieux utiliser la méthode appropriée (désinstaller,
faire tourner l'antivirus, etc.) . Si vous avez des doutes sur un
programme, j'ai fait un post permettant d'identifier plus de 2 mille
programmes dont des spyware et des virus :
http://213.246.36.243/archives/70050-1.htm
Il
existe un autre moyen d'identifier quel est le processus qui "locke" le
fichier. Il s'agit d'un freeware qui s'appelle Process Explorer qui existe
en 2 versions, pour 9X/ME et pour 2K/XP/NT.
http://www.sysinternals.com/files/procexp9x.zip (77
Kb) pour 9x/ME
http://www.sysinternals.com/files/procexpnt.zip (77
Kb) pour NT/2K

Comme vous le voyez, les programmes en cours d'exécution
sont visibles dans la fenêtre du dessus. Celle du dessous montre les
"handle", c'est-à-dire ce qui est utilisé comme ressources par le
programme. Par ressources, j'entends un ensemble de choses comme un
fichier, une dll, un "service" système, etc. Ce qui nous intéresse, ce
sont les "File". Cliquez sur la colonne "Type" et vous verrez alors les
"File" utilisés par un programme. Si vous ne voyez pas de colonne "Type",
faites CTRL+H Pour trouver un fichier en cours d'utilisation et ainsi
le ou (les) programme(s) qui locke ce fichier, faites CTRL+F (ou cliquez
sur les jumelles). Ensuite, dans la boîte qui s'ouvre, tapez le nom du
fichier (même partiellement) et faites Enter. Cela devrait faire
apparaître les processus qui utilisent le fichier. Faites l'essai avec les
fameux index.dat, tapez index.dat dans le champ et vous verrez les
instances d'Explorer qui bloquent les différents index.dat. Si vous ne
trouvez pas le programme coupable qui bloque votre fichier, il faut passer
à autre chose.
----------
Si toutes ces tentatives ont
échoué et que vous voulez malgré tout essayer sans l'aide d'un logiciel,
il y a une méthode pour Win9x/ME qui marche très bien.
Jean-Claude
Bellamy en parle ici : http://www.bellamyjc.net/fr/systeme.html#replace
C'est
possible en utilisant un programme prévu lors des installations, par
exemple. C'est le programme Wininit.exe qui affiche le message que vous
avez sûrement déjà vu au démarrage de Windows :
"Veuillez
patienter pendant la mise à jour de vos fichiers de configuration... Cela
peut prendre plusieurs minutes"
Vous pouvez très facilement
simuler cette opération dans le but de supprimer un fichier. Allez dans
le répertoire C:\windows (ou le nom qu'il porte chez vous). Vérifiez la
présence d'un fichier WinInit.ini ou .bak. S'il y a un WinInit.ini, vous
pouvez voir son contenu avec le bloc-notes. Au prochain redémarrage de
Windows, les opérations de suppression et de changement de nom seront
effectuées. S'il y a un WinInit.bak, ça veut dire que les opérations ont
déjà eu lieu, c'est WinInit.exe qui change le .ini en .bak quand il a fini
de traiter le fichier, afin qu'au prochain redémarrage, rien ne se
passe. Si aucun des deux fichiers n'existe, créez-en un s'appelant
WinInit.ini avec le bloc-notes. Ce fichier doit avoir les caractères
suivants au début :
[rename]
avec les crochets
!
puis, on peut mettre NUL= suivi du nom du fichier à supprimer (ou
DIRNUL= pour un dossier).
Exemple,
NUL=C:\Windows\Temp\Test.txt DIRNUL=C:\Windows\Temp
Voici
donc le contenu du fichier Wininit.ini pour effacer le fichier test.txt
dans le répertoire Windows\Temp
:
[rename] NUL=C:\Windows\Temp\Test.txt
Vous sauvez le
fichier et vous redémarrez Windows afin que l'opération se passe. Comme
l'explique JC Bellamy, le programme WinInit.exe est un des premiers à être
lancé avant les autres, il ne fait son boulot que si un fichier
WinInit.ini est présent.
http://www.bellamyjc.net/fr/windows9x.html#wininit
Solution
de suppression ou de remplacement pour tous les OS
Il s'agit
d'un petit logiciel (100KB) nommé CopyLock, je pense que c'est un Français
qui l'a écrit, il s'appelle Noël Danjou. Il nécessite OLEACC.dll, une
dll qui n'était pas installée sur mon Win98 mais que j'ai trouvée sur le
CD-ROM Win98, à placer dans Windows\System.
http://www.noeld.com/download/copylock.zip
http://noeld.com/download.htm#CopyLock

Comme vous
pouvez le constater, l'interface est très simple. D'après le Help (en
anglais), on peut amener un fichier par glisser/déposer mais j'ai un
message d'erreur quand j'essaie.
- Si on veut supprimer un fichier,
on clique sur "Add". Un sous-menu apparaît sous le bouton avec 2 options
:
Files to replace Files to delete
Choisir "Files to
delete". Ensuite, parcourir la liste des répertoires jusqu'au fichier
incriminé et le sélectionner, puis cliquer sur "Add". On peut faire de
même pour plusieurs fichiers. Le nom du fichier apparaît maintenant dans
la colonne "Source" et il n'y a rien dans la Destination. Il suffit
alors de cliquer sur "Replace" (je trouve que le nom est un peu ambigu,
mais bon). Si le fichier n'est pas bloqué, la suppression est immédiate.
Sinon, un message dit ceci "the system needs to restart to complete the
operation. Do you want to restart now ?". Vous pouvez répondre non si vous
ne voulez pas redémarrer directement. Le fichier sera supprimé au prochain
redémarrage et la manière est différente en fonction de l'OS, pour 9X/ME,
c'est le Wininit décrit ci-dessus qui est utilisé. Je ne connais pas la
technique utilisée pour NT/XP/2K. Si un volontaire pouvait tester sous
XP/2K avec l'aide d'un mouchard (voir mon sujet dans ma signature), ce
serait bien d'indiquer les changements faits par CopyLock au niveau de la
BdR.
- Pour remplacer un fichier, on clique sur "Add" puis sur
Files to replace. On choisit le fichier qu'on veut remplacer et ensuite,
le répertoire de destination, puis, on clique sur Replace. Il ne s'agit
pas d'un "move" car le fichier d'origine existe toujours après le replace.
Si un fichier du même nom existe dans le répertoire de destination, il est
remplacé.
Il y a aussi le freeware (en anglais) MoveOnBoot de
Gibin, à télécharger ici :
http://www.gibinsoft.net/gipoutils/bin/moveonb.zip
320 KB
Pour l'installer, il faut avoir MSIexec de MS, il s'agit
d'un module d'installation propre à MS, il gère les fichiers à extension
.msi Pour savoir si vous l'avez, il suffit de vérifier la présence du
programme msiexec.exe dans le répertoire Windows\System. Ou alors, un clic
droit sur le fichier moveonb.msi qui est dans le zip, vous devriez voir
différentes options typiques d'un fichier .msi comme "réparer", on peut
aussi regarder les informations concernant le fichier. Si vous ne l'avez
pas, voici où le télécharger :
Pour 9x/ME
http://download.microsoft.com/download/WindowsInstaller/Install/2.0/W9XMe/EN-US/InstMsiA.exe
1.6 MB
Pour NT/2K
http://download.microsoft.com/download/WindowsInstaller/Install/2.0/NT45/EN-US/InstMsiW.exe
1.6 MB
Il fonctionne suivant le même principe que CopyLock (avec le
Wininit.ini sous 9x) mais ne permet apparemment que de traiter un fichier
à la fois. L'anglais n'est pas un problème car il n'y a pas 36 options,
on clique sur "Suivant" au 1er écran, ensuite, on peut introduire le nom
du fichier, le drag and drop fonctionne avec celui-ci. On peut apparemment
amener un dossier par drag and drop mais pas en sélectionner un via la
boîte de dialogue. Quand le fichier est choisi, on clique sur "Suivant"
qui affiche un écran avec 3 options :
1) Copy file 2) Rename
file 3) Delete file
Si on choisit copy ou rename, le programme
demande alors un nom de répertoire ou de fichier de destination. Si on
choisit delete, le fichier sera détruit au prochain boot. Un dernier écran
de confirmation affiche l'opération qui se fera "copy" ou "delete" ou
"rename". Si on clique sur Start, on valide l'opération (on peut encore
cliquer sur précédent pour revenir en arrière). Quand c'est fini, on
clique sur Terminer et au prochain boot, l'opération se fait. Il ne
propose apparemment pas de redémarrer, contrairement à CopyLock. Il
rajoute un onglet aux propriétés de tous les fichiers et le menu
contextuel de chaque fichier se voit affubler d'une option "Delete this
file on the next boot". Dommage qu'il n'ait pas laissé le choix à
l'installation, je n'aime pas ces softs qui s'installent un peu partout
sans prévenir.
Si votre fichier n'est toujours pas supprimé ou
renommé, il reste des possibilités sous NT/XP/2K, il faut utiliser un
programme dédié à cette tâche, il en existe plusieurs qui sont
freeware.
C'est le cas de MOVEEX et de INUSE, ce
dernier étant un produit MS.
http://www.bellamyjc.net/download/moveex.exe 40
KB
http://download.microsoft.com/download/winntsrv40/Utility/1.3/NT4/EN-US/inuse.exe
790 KB
ou
http://download.microsoft.com/download/win2000platform/inuse/1.0/NT5/EN-US/inuse.exe
En
fait, ces outils sont prévus pour renommer des fichiers en cours
d'utilisation mais on peut aussi s'en servir pour renommer le fichier
récalcitrant et l'effacer au prochain démarrage.
Pour remplacer un
fichier en cours d'utilisation, on fait comme suit (je plagie Bellamy
)
Dans une fenêtre de commande (ou depuis le menu
Démarrer/Exécuter), taper la commande suivante :
moveex
c:\Temp\Nouvelle_gina.dll
c:\winnt\system32\Nwgina.dll
Déplace la librairie
c:\Temp\Nouvelle_gina.dll dans le répertoire c:\winnt\system32 et la
renomme en nwgina.dll . S'il existe déjà un fichier de ce nom dans
c:\winnt\system32, il sera remplacé par le nouveau.
Pour Inuse,
on fait
c:\Tools\inuse.exe \\server\updates\prodmod.dll
c:\program files\prodsys\prodmod.dll /y
pour autant que Inuse
soit dans le répertoire c:\Tools évidemment. Le premier fichier est le
source, le deuxième est celui qui est en cours d'utilisation et qui sera
remplacé.
Ces deux programmes agissent dans le registre de la façon
suivante (dixit Bellamy)
Il suffit d'utiliser dans un programme
la fonction "MoveFileEx" (dans kernel32.dll), avec le commutateur
MOVEFILE_DELAY_UNTIL_REBOOT. Cette fonction, une fois exécutée, se
contente de modifier ou créer dans la clef
: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SessionManager l'entrée
PendingFileRenameOperation (de type REG_MULTI_SZ), laquelle va contenir
les opérations à effectuer lors du redémarrage suivant.
Pour
annuler une opération de renommage avant que le système soit redémarré, il
suffit de modifier ou supprimer l'entrée PendingFileRenameOperation dans
la clef
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SessionManager
Ce
n'est pas dit explicitement dans la description de ces 2 programmes mais
je pense qu'on peut les utiliser pour supprimer un fichier. On va donc
faire croire à Windows qu'on veut remplacer un fichier par un autre.
Apparemment, Inuse a l'air de travailler uniquement avec des fichiers de
même nom alors que moveex est plus souple. On va prendre l'exemple avec un
même nom.
Nous avons donc notre fichier bloqué
(C:\Windows\Temp\Test.txt).
Attention, ces deux outils ne
permettent pas de renommer d'un disque à l'autre.
Dans une fenêtre
de commande (ou depuis le menu Démarrer/Exécuter), taper la commande
suivante :
moveex C:\Windows\Temp\Test.txt c:\Test.txt
En
fait, le nom de fichier en deuxième position pourrait être différent.
Attention, s'il y a déjà un test.txt dans C:\, il est écrasé. Une fois la
commande tapée, on peut redémarrer Windows et normalement, on peut
supprimer le fichier c:\Test.txt
Je ne pense pas que Inuse puisse
faire cette dernière opération, je veux dire dans le cas où le fichier de
destination n'existe pas. Nouvel appel aux testeurs, le but est donc
d'essayer Inuse avec un fichier de destination inexistant.
Voilà,
vous avez différentes solutions, vous pouvez bien sûr commenter ces
méthodes, si elles marchent ou pas. Si vous connaissez d'autres astuces et
que vous les avez testées, vous pouvez aussi les indiquer. Merci de
spécifier à chaque fois la méthode utilisée ainsi que la version de l'OS,
ce sera plus clair.
|