ظهور رسالة خطأ عند الأسلوب filesystemobject.copyfolder واجه ملف وجهة القراءة فقط: "تم رفض الإذن"


الأعراض


حاول استخدام التعليمة البرمجية التالية لنسخ محتويات المجلد المحدد إلى مجلد وجهة الذي يحتوي على ملف للقراءة فقط:
Dim fso, result, source, destination source= "C:\source_folder" 
destination = "D:\destination_folder"
Set fso = CreateObject("Scripting.FileSystemObject")
result = fso.CopyFolder(source, destination, true)

ملاحظة: في هذه التعليمة البرمجية source_folder يمثل اسم المجلد المصدر الفعلي، ويمثل destination_folder اسم المجلد الوجهة الفعلية.
عند تشغيل هذه التعليمات البرمجية، تتلقى رسالة الخطأ التالية في مربع حوار Windows Script Host :
البرنامج النصي: C:\folderName\test.vbs

الخط: 3

Char: 1

خطأ: تم رفض الإذن

التعليمات البرمجية: 800A0046

المصدر: خطأ وقت تشغيل Microsoft VBScript
يعتبر هذا سلوكاً متوقعا. بشكل عام، تتلقى رسالة خطأ "تم رفض الإذن" عندما يواجه الأسلوب filesystemobject.copyfolder ملف وجهة القراءة فقط. ومع ذلك، يمكنك سحب ملف إلى مجلد يحتوي على ملف للقراءة فقط بنفس الاسم. في هذه الحالة، تظهر الرسالة التالية في "مستكشف Windows":
يحتوي هذا المجلد مسبقاً ملف للقراءة فقط يسمى 'test.txt'

هل تريد استبدال الملف الموجود:

target_file_information
بهذا؟

source_file_information

السبب


تحدث هذه المشكلة بسبب وجود قيود في أسلوب CopyFolder . الأسلوب CopyFolder لا يمكن الكتابة فوق ملف في مجلد الوجهة إذا كان الملف القراءة فقط السمة مجموعة. يحتوي الأسلوب CopyFile هذا القيد نفسه.

الحل


لحل هذه المشكلة، استخدام الأداة المساعدة XCOPY رمز التبديل /R للكتابة فوق أي ملفات للقراءة فقط. يظهر مثال التعليمات البرمجية التالي طريقة واحدة استخدام الأداة المساعدة XCOPY للقيام بذلك.

تقدم Microsoft أمثلة برمجية للتوضيح فقط، دون أي ضمان صريح أو ضمني. هذا يتضمن، على سبيل المثال لا الحصر، الضمانات الضمنية الخاصة بالتسويق أو الملاءمة لغرض معين. تفترض هذه المقالة أنك معتاد على لغة البرمجة التي يتم شرحها والأدوات المستخدمة لإنشاء الإجراءات وتصحيحها. يساعد مهندسو الدعم لدى Microsoft شرح وظيفة إجراء محدد. ومع ذلك، لن يقوموا بتعديل هذه الأمثلة لتقديم وظيفة إضافية أو إنشاء إجراءات تستوفي متطلبات محددة.
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

في هذا المثال، رمز التبديل /R يمكن الكتابة فوق ملفات للقراءة فقط. يمنع رمز التبديل /Y المطالبة بتأكيد أنك تريد الكتابة فوق ملف الوجهة الموجود.

ملاحظات
  • قد يتم تعيين المفتاح /Y مسبقاً في متغير البيئة COPYCMD . إذا كنت ترغب في ظهور مطالبة، يمكنك استخدام الإصدار التبديل /Y . إصدار رمز التبديل إيقاف التبديل /Y مسبقاً في متغير البيئة COPYCMD .
  • الأداة المساعدة XCOPY غير متوفرة في نظام التشغيل Windows Vista. لحل هذه المشكلة في نظام التشغيل Windows Vista، استخدم الملف Robocopy.exe بدلاً من الملف Xcopy.exe في مثال التعليمات البرمجية.