نسخ ملف والتاكد من تطابق الملف الاصلى والمنسوخ - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي التقنية (https://delphi4arab.net/forum/forumdisplay.php?fid=6) +--- قسم : دلفي والتعامل مع الملفات (https://delphi4arab.net/forum/forumdisplay.php?fid=22) +--- الموضوع : نسخ ملف والتاكد من تطابق الملف الاصلى والمنسوخ (/showthread.php?tid=7792) |
نسخ ملف والتاكد من تطابق الملف الاصلى والمنسوخ - justnick - 03-05-2016 السلام عليكم نسخ ملف والتاكد من تطابق الملف الاصلى والمنسوخ من الممكن ان نحتاج الى نسخ ملف من مكان الى مكان اخر على القرص الصلب او حتى على الفلاش ديسك وممكن ان تكون هذه الملفات ذات اهمية كبيرة مثلا ملف قاعدة بيانات نقوم بعمل نسخة احطياطية منه بشكل يدوى مبدئيا عملية النسخ سهل للغاية فسوف نعتمد على ال TfileStream واستخدامه فى غاية البساطة كما سنرى سوف نحتاج الى تعريف عدد 2 كائن من النوع TfileStream كود : var الstream الاول خاص بالملف الاصل الاستريم التانى خاص بالملف الذى سوف ننشئه كود : mySourceFS := TFileStream.Create('source file name', fmOpenRead or fmShareDenyRead); لاحظ اننا فتحنا الملف للقراءة ومنع اى برنامج اخر من الوصول اليه وقت التعامل معه fmOpenRead or fmShareDenyRead كود : myDestFs := TFileStream.Create('target file name',fmCreate or fmOpenWrite ); لاحظ اننا سوف ننشئ الملف ان لم يكن موجود او اننا سنفتحه للكتابة fmCreate or fmOpenWrite الان عملية النسخ فى منتهى البساطة "Delphi is RAD" كود : mySourceFS.Position := 0; === تمت عملية النسخ بنجاح ولكن نريد ان نتاكد ان الملفين متطابقين سوف نلجأ الى الMD5 hash كل ملف له md5hash فريد خاص به عند التغير على الملف يتغير هذا الmd5hash سوف نستخدم اليونت IdHashMessageDigest من مشروع Indy كود : uses IdHashMessageDigest; كود : var myMD5Hasher := TIdHashMessageDigest5.Create; نعرف متغيرين من النوع string ليكون الاول هو الhash الخاص بالملف الاصل والتانى بالملف المنسوخ اليه "الجديد او الtarget" كود : var الان نحاول الحصول على الهاش الخاص بالملف الاصلى باستخدام الدالة HashStreamAsHex الخاصة بالكائن TIdHashMessageDigest5 واستدعائها كالاتى كود : SourceFileHash := myMD5Hasher.HashStreamAsHex(mySourceFS, 0, mySourceFS.Size); كود : DestFileHash := myMD5Hasher.HashStreamAsHex(myDestFs, 0, myDestFs.Size); الان نقوم بمقارنة كل من SourceFileHash و DestFileHash وذلك كالاتى كود : if SourceFileHash = DestFileHash then كم كانت الفكرة بسيطة جدا الان يكون الكود كله كالاتى نضع على الفورم opendialog و savedialog و button ويكون الكود فى الحدث onclick الخاص بالbutton كالاتى PHP كود : uses IdHashMessageDigest; اللهم انر قبر ابى واجعل مثواه الجنة |