Foutbericht wanneer u de methode filesystemobject.copyfolder een bestemming voor alleen-lezen bestand tegenkomt: 'Toegang geweigerd'


Symptomen


U probeert de volgende code gebruiken om de inhoud van een specifieke map kopiëren naar een doelmap met een alleen-lezen bestand:
Dim fso, result, source, destination source= "C:\source_folder" 
destination = "D:\destination_folder"
Set fso = CreateObject("Scripting.FileSystemObject")
result = fso.CopyFolder(source, destination, true)

Opmerking In deze code source_folder vertegenwoordigt de naam van de werkelijke bron en destination_folder vertegenwoordigt de naam van de werkelijke bestemming.
Wanneer u deze code uitvoert, wordt het volgende foutbericht weergegeven in het dialoogvenster Windows Script Host :
Script: C:\folderName\test.vbs

Regel: 3

Char: 1

Fout: Toegang geweigerd

Code: 800A0046

Bron: Microsoft VBScript runtime-fout
Dit is te verwachten gedrag. Meestal ontvangt u een foutbericht 'Toestemming geweigerd' wanneer de methode filesystemobject.copyfolder een bestemming voor alleen-lezen bestand tegenkomt. U kunt echter een bestand slepen naar een map met een alleen-lezen bestand met dezelfde naam. In dit geval wordt foutbericht het volgende in Windows Verkenner:
Deze map bevat al een alleen-lezen bestand met de naam 'test.txt'

Wilt u het bestaande bestand vervangen:

target_file_information
Met deze?

source_file_information

Oorzaak


Dit probleem treedt op vanwege een beperking in de copyfolder, methode. De copyfolder, methode kan niet een bestand in de doelmap overschreven als het bestand heeft het kenmerk alleen-lezen kenmerk instellen. De methode CopyFile heeft dit dezelfde beperking.

Oplossing


Gebruik dit probleem oplossen door het hulpprogramma XCOPY uit met de schakeloptie /R alle alleen-lezen bestanden overschreven. In het volgende voorbeeld toont één manier om het hulpprogramma XCOPY gebruiken om dit te doen.

Microsoft verstrekt programmeervoorbeelden uitsluitend ter illustratie, zonder expliciete of impliciete garantie. Dit omvat, maar is niet beperkt tot, de impliciete garanties van verkoopbaarheid of geschiktheid voor een bepaald doel. In dit artikel wordt ervan uitgegaan dat u bekend met de programmeertaal die wordt aangetoond en met de hulpprogramma's die worden gebruikt bent voor het maken van en naar procedures voor foutopsporing. Ondersteuningstechnici van Microsoft kunnen voor uitleg over de functionaliteit van een bepaalde procedure. Zij zal deze voorbeelden bieden extra functionaliteit of desgewenst uw specifieke vereisten echter niet wijzigen.
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

In dit codevoorbeeld kan de schakeloptie /R het overschrijven van de bestanden alleen-lezen. De schakeloptie /Y onderdrukt de vraag om te bevestigen dat u wilt het bestaande doelbestand overschreven.

Opmerkingen
  • De schakeloptie /Y kan al zijn ingesteld in de omgevingsvariabele COPYCMD . Als u de prompt wordt weergegeven, kunt u de /-Y -versie van de schakeloptie /Y . De /-Y -versie van de schakeloptie schakelt u de schakeloptie /Y die vooraf is ingesteld in de omgevingsvariabele COPYCMD .
  • Het hulpprogramma XCOPY is niet beschikbaar in Windows Vista. Dit probleem in Windows Vista op te lossen door het bestand Robocopy.exe te gebruiken in plaats van het bestand Xcopy.exe in het codevoorbeeld.