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: ولكن على المرء منا أن يسعى دائما للإحتراف في فهم أدق تفاصيل البرمجه ( طبعا لمن يهمه الأمر )
كل ودي وتقديري
أهلا بكم اخواني الكرام .. هذا المشروع يوضح كيفية ربط شريط ال 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: ولكن على المرء منا أن يسعى دائما للإحتراف في فهم أدق تفاصيل البرمجه ( طبعا لمن يهمه الأمر )
كل ودي وتقديري