دو راه حل واسه انجام اینکار معرفی می کنم :
راه اول استفاده از کتابخانه
Microsoft Scripting Runtime است.
در منوی Project ویژوال بیسیک روی آیتم References کلیک کنید.
حالا عنوان
Microsoft Scripting Runtime را در لیست بیابید و تیک بزنید. (مسیر پیشفرض این کتابخانه اینجا است :
C:\WINDOWS\system32\scrrun.dll
حالا کد زیر می تواند پوشه C:\Folder1 را با تمام محتویات و زیرشاخه هایش درون پوشه C:\Folder2 کپی کند :
کد:
Dim FS As New Scripting.FileSystemObject
FS.CopyFolder "C:\Folder1", "C:\Folder2"
استفاده از این کتابخانه از نظر کد نویسی ساده است ولی چند عیب مهم هم داره.
اولا اینکه نیازه که این کتابخانه حتما در کامپیوتری که برنامه را در آن اجرا می کنید نصب شده باشه.
ثانیا هیچ کنترلی روی عملیات ندارید و اگه کپی زمان زیادی طول بکشه برنامه شما قفل می کنه
و تا پایان عمل کپی باید بدون هیچ پیغامی کاربر را منتظر نگه دارید.
راه حل دوم استفاده از
توابع API سیستم عامل است.
تابع
SHFileOperation در API ویندوز برای انجام اینگونه عملیات مناسبتره.
من بر اساس این تابع دو توابع طراحی کردم با نامهای DirCopy و DirMove
فرق ایندو فقط در اینه که اولی پوشه را کپی می کند و دومی انتقال می دهد (Move)
حتی کد داخل آنها هم جز عبارت کلیدی Copy و Move در سایر موارد یکسان هستند.
کد:
[B]DirCopy[/B] ([B]Source[/B], [B]Destination[/B], [B][Silent][/B]) As Boolean
[B]DirMove[/B] ([B]Source[/B], [B]Destination[/B], [B][Silent][/B]) As Boolean
پارامتر
Source مسیر مبدا را نشان می دهد و
Destination مقصد را.
پارامتر
Silent اختیاری است. اگر False باشد (حالت پیشفرض)، هنگام کپی یک پنجره استاندارد را نشان می دهد
که پیشرفت عمل کپی یا انتقال را همانند Explorer ویندوز به تصویر می کشد.
همچنین دکمه Cancel هم دارد و اگر در زمان کپی با نسخه دیگری از فایل در پوشه مقصد روبرو شود پیغام Overwrite
را نشان خواهد داد.
اگر پارامتر
Silent را در وضعیت True قرار دهید، هیچ پیغامی به نمایش در نمی آید و در سکوت عملیات را انجام می دهد.
اگر عملیات این دو تابع موفقیت آمیز باشد، مقدار True را برمی گرداند.
مثلا :
کد:
DirCopy "C:\Folder1", "C:\Folder2"
در هر دو روش اگه پوشه مقصد وجود نداشته باشد، به صورت خودکار ایجاد خواهد شد.
برای استفاده از این دو تابع DirCopy و DirMove کافیست که فایل File.bas را ضمیمه پروژه تان نمایید.
کد دو تابع در داخل ماژول File.bas ضمیمه این پست می باشد.