عندما تقوم بنسخ ملف او نقله بإستخدام File.Copy او File.Move فإنه يتم نسخ الملف و لكن دون معرفة اى بيانات عن النسخ مثل سرعة النقل او الوقت المتبقى على انتهاء عملية النقل ايضا انت لا تستطيع وقف عملية النقل، و فى حالة ان الملف ذو حجم كبير من المحتمل ان يتوقف عمل البرنامج حتى انتهاء النسخ (إلا إذا كان النسخ من داخل Thread منفصل).
هذه مشكله واجهتنى كثيرا فى برامجى لذا قمت بعمل بديل لهاتين الدالتين بإستخدام الدالتين CopyFileWithProgress و MoveFileWithProgress حيث تقوم هاتين الدالتين بارسال بيانات عن تقدم عميل النسخ او النقل لدالة فرعيه تقوم انت بتضمينها لذا و عوضا عن ذلك قمت بصنع فئتين هما FileSystem و CopyInfoEventArgs هذا هو شكل الفئتين (بدون كود)
Public Class CopyInfoEventArgs Inherits EventArgs ' source file size in bytes Public ReadOnly Property TotalSourceFileSize() As Long ' total bytes transfered from source file to destination file Public ReadOnly Property TotalBytesTransfered() As Long ' last bytes transfered from source file to destination file Public ReadOnly Property LastBytesTransfered() As Long ' percent of operation to be complete from 0 to 100 Public ReadOnly Property Percent() As Integer ' remaining time to operation to be completed in seconds Public ReadOnly Property TimeToComplete() As Long ' transfer speed of current operation. transfer speed mesured in byte per second B/s Public ReadOnly Property TransferSpeed() As Long End Class
و هذا هو كود الفئه FileSystem (ايضا بدون كود)
Public Class FileSystem Public Delegate Sub FileOperationEventHandler(ByVal sender As Object, ByVal e As CopyInfoEventArgs) Public Event FileOperation As FileOperationEventHandler ' Source FileName ' while copying this property is readonly Public Property SourceFile() As String ' Destination FileName ' while copying this property is readonly Public Property DestinationFile() As String ' Allow Overwrite ' while copying this property is readonly Public Property Overwrite() As Boolean ' cancel current operation ' set true to cancel, false to resume Public Property CancelOperation() As Boolean Public Sub CopyFile() Public Sub MoveFile() End Class
و كمثال تطبيقى على الفئه قمت بعمل برنامج لنسخ او نقل الملفات من مكان الى اخر و هذا شكله
فقط قم بإختيار الملف الذى ستتم عليه العمليه و الملف الناتج و نوع العمليه ثم اضغط على الزر Action ستظهر لك القائمه التاليه
الزر Start Transfer غير فعال لإنى لم اختر ملف المصدر و الملف الناتج (لابد ان يكون الملف المصدر و الناتج مختلفين و ليسوا واحد). بمجرد الضغط عليه سيبدا النقل و ستظهر سرعة النقل و الوقت المتبقى، كذلك مدى تقدم عملية النقل. اثناء النقل عند الضغط على زر Action تظهر القائمه التاليه:
و الهدف منها ايقاف عملية النقل بشكل مؤقت ثم اكمالها او الغائها تماما
ملاحظه هامه : البرنامج لا يتحقق من المساحه الخاليه داخل الـ Drive الذى يتم النسخ او النقل فيه لذا كن حذر.
فى المرفقات نسختين من البرنامج الكود و نسخه تنفيذيه فقط و قد قمت بعمل Scan عليها من الفيروسات ببرنامج كاسبرسكى قبل رفعها لكم.
هذه هى النسخه التنفيذيه
و هذا هو الكود
و الله ولى التوفيق
