Message d’erreur lorsque la méthode filesystemobject.copyfolder rencontre un fichier de destination en lecture seule : « Autorisation refusée »


Symptômes


Vous essayez d’utiliser le code suivant pour copier le contenu d’un dossier spécifique à un dossier de destination qui contient un fichier en lecture seule :
Dim fso, result, source, destination source= "C:\source_folder" 
destination = "D:\destination_folder"
Set fso = CreateObject("Scripting.FileSystemObject")
result = fso.CopyFolder(source, destination, true)

Remarque Dans ce code, source_folder représente le nom du dossier source réelle et destination_folder représente le nom du dossier de destination réel.
Lorsque vous exécutez ce code, le message d’erreur suivant s’affiche dans la boîte de dialogue Windows Script Host :
Script : C:\folderName\test.vbs

Ligne : 3

Char : 1

Erreur : Autorisation refusée

Code : 800 a 0046

Source : Erreur d’exécution Microsoft VBScript
Ce comportement est normal. En général, vous recevez un message d’erreur « Autorisation refusée » lorsque la méthode filesystemobject.copyfolder rencontre un fichier de destination en lecture seule. Toutefois, vous pouvez faire glisser un fichier vers un dossier contenant un fichier en lecture seule du même nom. Dans ce cas, vous recevez le message suivant s’affiche dans l’Explorateur Windows :
Ce dossier contient déjà un fichier en lecture seule nommé 'test.txt'

Voulez-vous remplacer le fichier existant :

target_file_information
avec celui-ci ?

source_file_information

Cause


Ce problème se produit en raison d’une limitation dans la méthode CopyFolder . La méthode CopyFolder ne peut pas remplacer un fichier dans le dossier de destination si le fichier a la lecture seule attribut défini. La méthode CopyFile possède cette même limitation.

Résolution


Pour résoudre ce problème, utilisez l’utilitaire XCOPY avec le commutateur /R pour remplacer tous les fichiers en lecture seule. L’exemple de code suivant montre une manière d’utiliser l’utilitaire XCOPY pour cela.

Microsoft fournit des exemples de programmation à titre d'illustration uniquement, sans garantie expresse ou implicite. Ceci inclut, mais n'est pas limité à, les garanties implicites de qualité marchande ou d'adéquation à un usage particulier. Cet article suppose que vous êtes familiarisé avec le langage de programmation présenté et les outils utilisés pour créer et déboguer des procédures. Les ingénieurs du support technique Microsoft peuvent aider à expliquer la fonctionnalité d'une procédure particulière. Toutefois, ils ne modifieront pas ces exemples pour fournir des fonctionnalités supplémentaires ou créer des procédures répondant à vos besoins spécifiques.
Dim oShell, source, destination source = "C:\myFolder\*" 
destination = "D:\myOtherFolder"
Set oShell = WScript.CreateObject("WScript.Shell")
oShell.Run "xcopy.exe " & source & " " & destination & " /R /Y"
Set oShell = Nothing

Dans cet exemple de code, le commutateur /R permet l’écrasement des fichiers en lecture seule. Le commutateur /Y supprime l’invite à confirmer que vous souhaitez remplacer le fichier de destination existant.

Remarques
  • Le commutateur /Y peut être prédéfini dans la variable d’environnement COPYCMD . Si vous souhaitez que l’invite s’affiche, vous pouvez utiliser la version/-y du commutateur /Y . La version/-y du commutateur désactive le commutateur /Y qui est prédéfini dans la variable d’environnement COPYCMD .
  • L’utilitaire XCOPY n’est pas disponible dans Windows Vista. Pour résoudre ce problème dans Windows Vista, utilisez le fichier Robocopy.exe au lieu du fichier Xcopy.exe dans l’exemple de code.