Mesaj de eroare atunci când metoda filesystemobject.copyfolder întâlnește un fișier doar în citire destinație: "Permission Denied"


Simptome


Încercați să utilizați următorul cod pentru a copia conținutul unui folder specific într-un folder destinație care conține un fișier doar în citire:
Dim fso, result, source, destination source= "C:\source_folder" 
destination = "D:\destination_folder"
Set fso = CreateObject("Scripting.FileSystemObject")
result = fso.CopyFolder(source, destination, true)

Notă În acest cod, source_folder reprezintă numele de folder sursă reală și destination_folder reprezintă numele de folder destinație real.
Când executați acest cod, primiți următorul mesaj de eroare în caseta de dialog Windows Script Host :
Script: C:\folderName\test.vbs

Linie: 3

Char: 1

Eroare: Permisiune refuzată

Cod: 800A0046

Sursă: Eroare de execuție Microsoft VBScript
Acest comportament este așteptat. De obicei, primiți un mesaj de eroare "Permission Denied" când metoda filesystemobject.copyfolder întâlnește un fișier doar în citire destinație. Cu toate acestea, aveți posibilitatea să glisați un fișier într-un folder care conține un fișier doar în citire cu același nume. În acest caz, primiți următorul mesaj în Windows Explorer:
Acest folder conține deja un fișier doar în citire, denumit 'test.txt'

Doriți să Înlocuiți fișierul existent:

target_file_information
cu acest lucru?

source_file_information

Cauza


Această problemă se produce din cauza limitelor din metoda CopyFolder . Metoda CopyFolder nu poate suprascrie un fișier în folderul destinație dacă fișierul are doar în citire set de atribut. Metoda CopyFile are această limită același.

Rezolvare


Pentru a rezolva această problemă, utilizați utilitarul XCOPY împreună cu parametrul/r pentru a suprascrie fișierele doar în citire. Următorul exemplu de cod arată o modalitate de a utiliza utilitarul XCOPY se face acest lucru.

Microsoft furnizează exemple de programare scop ilustrativ, fără nicio garanţie explicită sau implicită. Aceasta include, dar nu se limitează la, garanţiile implicite de vandabilitate sau de potrivire pentru un anumit scop. Acest articol presupune că sunteţi familiarizat cu limbajul de programare care este prezentat şi cu instrumentele utilizate pentru a crea şi a depana proceduri. Specialiștii în asistență Microsoft pot ajuta la explicarea funcționalității unei anumite proceduri. Cu toate acestea, nu vor modifica aceste exemple pentru a furniza funcționalitate suplimentară construi proceduri pentru a răspunde cerințelor dvs. specifice.
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

În acest exemplu de cod, parametrul/r permite suprascrierea fișierelor doar în citire. Parametrul /Y suprimă cere să confirmați că doriți să Suprascrieți fișierul destinație existente.

Note
  • Parametrul/y pot fi predefinite în variabila de mediu COPYCMD . Dacă doriți să apară linia, utilizați versiunea/Y de parametrul/y . Versiunea/Y de parametru dezactivează parametrul/y care este presetată în variabila de mediu COPYCMD .
  • Utilitarul XCOPY nu este disponibil în Windows Vista. Pentru a rezolva această problemă în Windows Vista, utilizați fișierul Robocopy.exe în loc de fişier Xcopy.exe în exemplu de cod.