En Python, lors de l'exécution de shutil.rmtree
sur un dossier contenant un fichier en lecture seule, l'exception suivante est affichée :
File "C:\Python26\lib\shutil.py", ligne 216, dans rmtree
rmtree(fullname, ignore_errors, onerror)
File "C:\Python26\lib\shutil.py", ligne 216, dans rmtree
rmtree(fullname, ignore_errors, onerror)
File "C:\Python26\lib\shutil.py", ligne 216, dans rmtree
rmtree(fullname, ignore_errors, onerror)
File "C:\Python26\lib\shutil.py", ligne 216, dans rmtree
rmtree(fullname, ignore_errors, onerror)
File "C:\Python26\lib\shutil.py", ligne 216, dans rmtree
rmtree(fullname, ignore_errors, onerror)
File "C:\Python26\lib\shutil.py", ligne 216, dans rmtree
rmtree(fullname, ignore_errors, onerror)
File "C:\Python26\lib\shutil.py", ligne 216, dans rmtree
rmtree(fullname, ignore_errors, onerror)
File "C:\Python26\lib\shutil.py", ligne 221, dans rmtree
onerror(os.remove, fullname, sys.exc_info())
File "C:\Python26\lib\shutil.py", ligne 219, dans rmtree
os.remove(fullname)
WindowsError: [Error 5] Access is denied: 'build\\tcl\\tcl8.5\\msgs\\af.msg'
En regardant dans la boîte de dialogue Propriétés du fichier, j'ai remarqué que le fichier af.msg
est défini en lecture seule.
La question est donc : quel est le contournement/correctif le plus simple pour contourner ce problème - sachant que mon intention est de faire l'équivalent de rm -rf build/
mais sur Windows? (sans avoir à utiliser des outils tiers comme unxutils ou cygwin - car ce code est destiné à être exécuté sur une installation Windows de base avec Python 2.6 et PyWin32 installé)
5 votes
shutil.rmtree
utiliseos.remove
pour supprimer des fichiers.os.remove
supprime très bien les fichiers en lecture seule (du moins sur Unix).os.remove
ne peut pas supprimer un fichier sous Windows s'il est en cours d'utilisation.0 votes
Connexe : Comment éviter l'erreur "WindowsError: [Error 5] L'accès est refusé"
0 votes
Comme je l'ai vécu, peut-être que cette erreur apparaîtra si le répertoire est ouvert et que vous exécutez le code et est liée au processus de suppression, et non à l'étape de création.