05-05-2010, 10:39 PM (آخر تعديل لهذه المشاركة: 05-05-2010, 10:43 PM بواسطة kachwahed.)
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله
المطلوب في هذا العمل:
- كتابة خوارزمية صحيحة لاكتشاف الملفات المكررة في جذر مسار محدد
- للمتميزين: مطلوب أسرع خوارزمية ممكنة
المدة: 15 يوم
الشروط:
- استخدام بصمة MD5 للفحص (كبداية)
- تابع لقياس سرعة الفحص
- عدم استخدام مكونات خارجية
- تطرح الملفات التنفيذية فقط وبعد التقييم يطرح السورس
المثال مرفق.
16-05-2010, 10:17 PM (آخر تعديل لهذه المشاركة: 20-05-2010, 08:44 PM بواسطة kachwahed.)
إقتباس :اسف المثال مزال يحتاج بعض العمل فهو يحتوي علي العديد من الاخطاء .....
لاحظت ذلك أيضا حاول المرور على الملفات من خلال Loop واحدة
---
ألقيت نظرة أقرب على مثالك AvimimuS
هناك خلل في البحث عن الملفات، حيث يقوم الإجراء SearchAndGetPropertiesOfFile بالبحث في مجلد فرعي واحد فقط
الطريقة بأن تجعل التابع يستدعي نفسه كلما وجد مجلد آخر، وبذلك يكون البحث Recursive
استخدام Threads فكرة ممتازة
محاولة جيدة AvimimuS بالتوفيق.
انتهت مدة التمرين، ومن أراد المحاولة فله ذلك
قبل أن أطرح الفكرة هناك شيء أود أن أنبه عليه:
عندما قلت:
إقتباس :وتذكروا أن المبرمج المحترف مبرمج كسول!
كسول ليس بمعنى أن لا يشارك :laugh:
بل بمعنى أنه يستخدم ما توصلت إليه الخبرات السابقة ليحصل على نتيجة أفضل في وقت أقل بأقل جهد
ومن الخبرات السابقة التوابع والإجراءات التي توفرها مكتبة دلفي بما فيها VCL، توابع، إجراءات، أنماط...
ومن الأنماط TStringList الشهير الذي يحتوي على خاصية لكشف العناصر المكررة
يمكن أن نستغل هذه الخاصية مع إجراء للمرور على جميع ملفات الجذر بشكل Recursive مرة واحدة...
كيف ذلك؟
أولا ننشئ النمط ونجعله يرفض العناصر المكررة:
kachwahed كتب :
لاحظت ذلك أيضا حاول المرور على الملفات من خلال Loop واحدة
---
ألقيت نظرة أقرب على مثالك AvimimuS
هناك خلل في البحث عن الملفات، حيث يقوم الإجراء SearchAndGetPropertiesOfFile بالبحث في مجلد فرعي واحد فقط
الطريقة بأن تجعل التابع يستدعي نفسه كلما وجد مجلد آخر، وبذلك يكون البحث Recursive
استخدام Threads فكرة ممتازة
محاولة جيدة AvimimuS بالتوفيق.
اخي كاش واحد :
هل جربت المثال ..؟؟؟
لايوجد خلل ! الاجراء يبحث في جميع المجلدات الفرعية .
-الاجراء يقوم بالبحث في الملفات الموجودة في مجلد ما بعدما ينتهي يفحص اذا كان هناك مجلد فرعي وهكذا
مثلا يبحث في C:\WINDOWS ثم في مجلد System32 حتي يجد جميع الملفات الموجودة في هذا المجلد ثم ينتقل الي مجلد repair وهكدا ...