مشاهدة النسخة كاملة : [PracticalWork_01] البحث عن الملفات المكررة
kachwahed
05-05-2010, 11:39 PM
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله
المطلوب في هذا العمل:
- كتابة خوارزمية صحيحة لاكتشاف الملفات المكررة في جذر مسار محدد
- للمتميزين: مطلوب أسرع خوارزمية ممكنة
المدة: 15 يوم
الشروط:
- استخدام بصمة MD5 للفحص (كبداية)
- تابع لقياس سرعة الفحص
- عدم استخدام مكونات خارجية
- تطرح الملفات التنفيذية فقط وبعد التقييم يطرح السورس
المثال مرفق.
للدعم:
- للبحث عن الملفات (http://www.delphi4arab.com/forum/showthread.php?p=15293)
- بصمة MD5 من هنا (http://www.delphi4arab.com/forum/showthread.php?t=435)أو هنا (http://www.delphi4arab.com/forum/showthread.php?t=2263)
- لقياس المدة المستغرقة (http://www.delphi4arab.com/forum/showthread.php?t=2748)
وتذكروا أن المبرمج المحترف مبرمج كسول!
STRELiTZIA
16-05-2010, 08:14 PM
السلام عليكم و رحمة الله
للتذكير...
هل من مشارك ؟ اول مشاركة تجعلك تربح سيارة Hummer :)
بالتوفيق ان شاء الله
hanipino
16-05-2010, 08:40 PM
للاسف اخوانى لا يتوفر الوقت ...
ان شاء الله فى الصيف ان كان كل شىء على مايرام ساحاول
هل من مشارك ؟ اول مشاركة تجعلك تربح سيارة Hummer
beta او pro :bye1:
kachwahed
16-05-2010, 08:46 PM
H3 فاز بها AvimimuS، فهنيئا له :laugh:
http://i64.photobucket.com/albums/h198/birming8/Hummer_H3_84.jpg
المحاولة... التجربة... الخطأ...النجاح...ثم اكتساب Knowhow.... أغلى من أي Hummer :)
AvimimuS
16-05-2010, 11:00 PM
H3 فاز بها AvimimuS، فهنيئا له
:thumbsup::tong:
اسف المثال مزال يحتاج بعض العمل فهو يحتوي علي العديد من الاخطاء .....:rtfm3:
kachwahed
16-05-2010, 11:17 PM
اسف المثال مزال يحتاج بعض العمل فهو يحتوي علي العديد من الاخطاء .....
لاحظت ذلك :) أيضا حاول المرور على الملفات من خلال Loop واحدة
---
ألقيت نظرة أقرب على مثالك AvimimuS
هناك خلل في البحث عن الملفات، حيث يقوم الإجراء SearchAndGetPropertiesOfFile بالبحث في مجلد فرعي واحد فقط
الطريقة بأن تجعل التابع يستدعي نفسه كلما وجد مجلد آخر، وبذلك يكون البحث Recursive
استخدام Threads فكرة ممتازة :)
محاولة جيدة AvimimuS بالتوفيق.
kachwahed
20-05-2010, 09:59 PM
انتهت مدة التمرين، ومن أراد المحاولة فله ذلك
قبل أن أطرح الفكرة هناك شيء أود أن أنبه عليه:
عندما قلت:
وتذكروا أن المبرمج المحترف مبرمج كسول!
كسول ليس بمعنى أن لا يشارك :laugh:
بل بمعنى أنه يستخدم ما توصلت إليه الخبرات السابقة ليحصل على نتيجة أفضل في وقت أقل بأقل جهد :)
ومن الخبرات السابقة التوابع والإجراءات التي توفرها مكتبة دلفي بما فيها VCL، توابع، إجراءات، أنماط...
ومن الأنماط TStringList الشهير الذي يحتوي على خاصية لكشف العناصر المكررة
يمكن أن نستغل هذه الخاصية مع إجراء للمرور على جميع ملفات الجذر بشكل Recursive مرة واحدة...
كيف ذلك؟
أولا ننشئ النمط ونجعله يرفض العناصر المكررة:
DupList := TStringList.Create;
DupList.Sorted := true;
DupList.Duplicates := dupError;
أجل dupError ليرفضها ويرسل رسالة خطأ!
ثم نمر من خلال جميع ملفات الجذر، وندفع البصمات (Hash) إلى DupList
لكنها ستثير خطأ عند تلقي نفس البصمة؟
يتبع...:)
AvimimuS
21-05-2010, 12:42 AM
لاحظت ذلك :) أيضا حاول المرور على الملفات من خلال Loop واحدة
---
ألقيت نظرة أقرب على مثالك AvimimuS
هناك خلل في البحث عن الملفات، حيث يقوم الإجراء SearchAndGetPropertiesOfFile بالبحث في مجلد فرعي واحد فقط
الطريقة بأن تجعل التابع يستدعي نفسه كلما وجد مجلد آخر، وبذلك يكون البحث Recursive
استخدام Threads فكرة ممتازة :)
محاولة جيدة AvimimuS بالتوفيق.
اخي كاش واحد :
هل جربت المثال ..؟؟؟
لايوجد خلل ! الاجراء يبحث في جميع المجلدات الفرعية .
-الاجراء يقوم بالبحث في الملفات الموجودة في مجلد ما بعدما ينتهي يفحص اذا كان هناك مجلد فرعي وهكذا
مثلا يبحث في C:\WINDOWS ثم في مجلد System32 حتي يجد جميع الملفات الموجودة في هذا المجلد ثم ينتقل الي مجلد repair وهكدا ...
السلام عليكم
1- مقارنة برنامج AvimimuS بـ Easy Duplicate Finder & Duplicate File Finder
- البحث فقط على *.exe
Easy Duplicate Finder
http://img210.imageshack.us/img210/3241/64523978.gif
Duplicate File Finder
http://img175.imageshack.us/img175/7496/53961027.gif
SDF by AvimimuS:)
http://img580.imageshack.us/img580/1064/89986813.gif
ملاحظات فقط ! & يمكن هناك خلل في تزامن ؟
الـ THread في ما يخص إستجابة زر Pause , بالتوفيق ,,
AvimimuS
21-05-2010, 01:36 AM
مقارنة برنامج avimimus بـ easy duplicate finder & duplicate file finder
بارك الله فيك اخي الكريم علي المقارنة
لاادري علي مادا تعتمد هده البرامج في المقارنة
ملاحظات فقط ! & يمكن هناك خلل في تزامن ؟ & nember of file & elapased time
نعم لاحظت تلك الاخطاء لكن لضيق الوقت .... ان وجدت بعض الوقت ساحاول ان اصلحها ان شاء الله
بارك الله فيك علي الملاحظات
1- تم الحصول على نفس نتيجة البرامج التانية لكن الخلل في GetDuplicateFile
, فوتت 2 نتائج إجابية :kick:.
2- سرعه البحث جيدة & مقارنة بـ Easy Duplicate Finder & Duplicate File Finder
بالتوفيق ,,
kachwahed
21-05-2010, 04:35 PM
لايوجد خلل ! الاجراء يبحث في جميع المجلدات الفرعية .
-الاجراء يقوم بالبحث في الملفات الموجودة في مجلد ما بعدما ينتهي يفحص اذا كان هناك مجلد فرعي وهكذا
أجل، بدا لي كأنه يبحث في المجلدات الفرعية بمستوى واحد فقط.
تحقق من GetDeplicateFile فيها خلل، أيضا حاول التقليل من المتغيرات في GetDeplicateFile.
-----
...نواصل:
قلنا أن DupList ستثير Exception حال إضافة نفس الـ Hash
DupList.Duplicates := dupError;
الفكرة أن نقوم باقتناص الخطأ (Try/Except) ونلقي القبض على الملف المكرر:
try
MD5Hash := MD5Print(MD5File(directory+search.Name));
FileList.Add(directory + search.Name);
DupList.Add(MD5Hash);
except
DupItem := fmain.lvDupFiles.Items.Add;
DupItem.Caption := search.Name;
DupItem.SubItems.Add(IntToStr(search.Size));
DupItem.SubItems.Add(MD5Hash);
DupItem.SubItems.Add(directory+search.Name);
end;
وبذلك نكون قد حصلنا على الملفات المكررة من خلال Loop واحدة :)
فيما يخص رسالة الخطأ أثناء تنقيح البرنامج، يمكن تجاوزها من Tools ثم Debugger Options ونضيف الصنف EStringListError ضمن القائمة من التبويب Language Exceptions
-----
يمكن بفكرة مبسطة كهذه تطوير برنامج متكامل بإضافة خيارات أخرى...
غالب برامج البحث عن الملفات المكررة تعتمد على خيار البحث بالمحتوى باستخدام بصمات CRC32, MD5, SH1, HAVAL ... و/أو خيار البحث بتطابق بالاسم وحجم الملف، وتوفر خيارات إضافية للفرز (حسب التاريخ، وحجم الملفات وخصائصها...)
ثم تقدم خدمات متقدمة لبعض العمليات على الملفات (نقل، حذف، نسخ...)، ومن الخيارات أيضا: إقصاء مجلدات/لواحق ملفات، معاينة الملفات وعرض الصور، وغير ذلك... مع خيار لحفظ واسترجاع مشروع البحث... كنت سأقترحه لمشروع جماعي لو تقدم العمل :)
شكرا لكم جميعا :bye1:.
vBulletin® , Copyright ©2008-2012