المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : مشروع ربط شريط progress بعملية فك ضغط ملف zip أو rar بشكل صحيح


Haitham.2012
15-10-2012, 05:06 AM
http://www.alheweny.org/mages2/salam.gif

أهلا بكم اخواني الكرام .. هذا المشروع يوضح كيفية ربط شريط ال progress بعملية فك ضغط ملف rar أو zip بمعنى أن يظهر للمستخدم شريط progress يوضح له مدى تقدم عملية فك ضغط الملفات

http://img577.imageshack.us/img577/4111/27283845.png

ونظرا لطول الموضوع وتعقده قليلا أحب أن أنوه إنه إذا كنت تهتم فقط بتحميل الملفات المفتوحه فإليك رابط التحميل

http://www.mediafire.com/?kijj1ij5b3dyfzu

أما إذا كنت تهتم بفهم الفكره فتابع الموضوع ..


في البدايه ظهرت معي مشكله عندما فكرت في عمل شريط progress يوضح مدى تقدم عملية فك الضغط عن الملفات , فلاحظت شئ غريب وهو أن الأكواد تقوم أولا بفك الضغط وبعد الإنتهاء تماما من الفك تقوم بتحريك شريط ال progress أي لا فائدة لشريط ال progress من الناحيه الفعليه

مبدئيا كنت أستخدم هذا الكود لتحريك شريط ال progress مع عملية فك الضغط

zip_contents = Zip.GetContents("Data\\Docs\\file.zip", true);
count = Table.Count(zip_contents);
for i=1, count do
Progress.SetCurrentPos("Progress1", i*100/count);
Zip.Extract("Data\\Docs\\PNG.zip", {zip_contents[i]}, _DesktopFolder, true, true, "", ZIP_OVERWRITE_ALWAYS, nil);
end

ولكن كما وضحت سابقا أنه لا يحرك شريط ال progress إلا بعد أن ينتهي من عملية فك الضغط فعليا


طيب لماذا ظهرت هذه المشكله ..


الفضل لله أولا ثم لأخي النصل القاطع وضح لي نقطه وهي كالتالي :

نفترض أن لديك ملف مضغوط اسمه file.zip و به 10 ملفات ومن ضمنهم مجلد اسمه ( new folder ) ويوجد داخله أيضا مجموعه من الملفات

فعندما يقوم البرنامج بفك الضغط بإستخدام الكود السابق سوف يعتبر المجلد ( new folder ) كأنه ملف واحد ( على الرغم انه سوف يقوم بفك الملفات التي بداخله و بشكل عادي ) ولكن هذا سوف يسبب مشكلة تأخر تقدم شريط ال progress


طيب .. لو لاحظنا في هذا الكود الخاص بمعرفة محتويات الملف المضغوط .. سنجد به حقل إختياري ( إذا كنت تريد أن تشمل المجلدات ام لا )

Zip.GetContents("Data\\Docs\\file.zip", true);

وهنا true أي اشمل المجلدات

و false أي لا تشمل المجلدات

طيب إذا كنت تريد أن تكون عملية تقدم شريط progress صحيحه ودقيقه عليك أن تستخدم نتيجة كلا الحالتين .. سأقول لك لماذا


لأنك لو استخدم الطريقه الأولى فقط وهي أن تشمل المجلدات

سوف تحدث مشكله وهي

1 - حلقات التكرار ستزيد بعدد المجلدات ( يعني لو الملف المضغوط يحتوي على 10 ملفات و 5 مجلدات فإن حلقات التكرار ستكون 15 حلقه ) وهذا يسبب مشكله في تقدم شريط ال progress

2 - المشكله التي تحدثنا عنها وهي فك الضغط أولا ثم تحريك شريط ال progress


ولو استخدمت الطريقه الثانية فقط وهي أن لا تشمل المجلدات

سوف تحدث مشكله وهي

1 - الملفات التي سوف يتم فك ضغطها ستنقص بعدد المجلدات بمعنى ( لو الملف المضغوط يحتوي على 10 ملفات و 3 مجلدات سوف يتم فك ضغط 7 ملفات فقط ويترك ال 3 ملفات الباقيه )



وهنا علينا أن نستخدم الطريقتين


نستخدم الطريقه الاولى وهي أن تشمل المجلدات وذلك لمعرفة عدد المجلدات فقط ( ولكن بطريقه غير مباشرة وسنستخدم طريقه معينه لنعرف بها عدد المجلدات ) ستجدوا الكود في الملف المفتوح


والطريقه الثانيه وهي أن لا تشمل المجلدات لكي نستخدمها في عملية فك الضغط الحقيقية

بمعنى ذكرنا في الطريقه الثانيه يتم فك ضغك الملفات ولكنها تنقص بعدد المجلدات وبالتالي سوف نحتاج لنزيد حلقات التكرار بعدد المجلدات حتى يتم فك ضغط كل الملفات وهذا ما حصلنا عليه في الطريقه الاولى


أتمنى أن تكون وضحت الفكرة وهذا الملف المفتوح قد يسهل عليكم الأمر

رابط التحميل ..

http://www.mediafire.com/?kijj1ij5b3dyfzu

طبعا قد يقول البعض ( بلاش وجع راس ) HeHeHe !! :abc_145: ولكن على المرء منا أن يسعى دائما للإحتراف في فهم أدق تفاصيل البرمجه ( طبعا لمن يهمه الأمر )

كل ودي وتقديري

abohmam
15-10-2012, 12:30 PM
جزاك الله خيرا اخانا هيثم :abc_022:

صدقت لمن يريد الإحتراف لابد وأن يجتهد ويتعلم اسرار البرمجة

بارك الله في جهودك

أبو صخر
15-10-2012, 01:49 PM
موفق بإذن الله ... لك مني أجمل تحية .

أبو يوسف
15-10-2012, 05:30 PM
جزاك الله خيرا أخانا هيثم إسماعيل وأكثر من امثالك

azizsoft
16-10-2012, 12:44 AM
بسم الله الرحمن الرحيم

جزاك الله خيراأخ هيثم
تطبيقات مميزة كالعادة .



http://imageshack.us/a/img42/6949/squarede.png