تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
التعامل مع ملفات zip
#1
السلام عليكم ورحمة الله وبركاته



كما نعلم ان ملفات Zip هي ملفات عبارة عن حزم تحتوي في داخلها على ملفات

كل ملف مضغوط داخل الZip يسمى Entrie .


فقط في هذا المقال سأعرض اكواد تقوم بالتعامل مع ملف zip

وذلك باستعمال مكتبة من مكتبات الدوت نت التي تم انشائها في الفريم وورك 4.5

لذلك اتبع الخطوات :-





اولا : عليك بتحويل الTarget Framework لمشروعك الى 4.5



ثانيا : قم باضافة المراجع System.IO.Compression و System.IO.Compression.FileSystem





ثاثا : اضف في اعلى المحرر :
PHP كود :
using System.IO;
using System.IO.Compression





الان يمكنك التعامل مباشرة مع الكلاسات التي تتعامل مع الzip










اولا : ضغط مجلد وتحويله الى حزمة zip :-


PHP كود :
ZipFile.CreateFromDirectory("c://Program Files""c://Programs Files_Compressed"CompressionLevel.Fastesttrue); 

كلشيئ واضح في الكود مايحتاج شرح .




--




ثانيا : استخراج ملف zip الى مجلد :-


PHP كود :
ZipFile.ExtractToDirectory("c://Programs Files_Compressed""c://Programs Files"); 




--




ثالثا :- ضغط ملفات معينة دون ضغط مجلد :-



PHP كود :
using (ZipArchive zip ZipFile.Open("archivewillbecreated.zip"ZipArchiveMode.Create))
{
    
zip.CreateEntryFromFile(@"c:\something.txt""data/path/something.txt");










الان التعامل مع ملف zip ومحتواياته من خلال برنامجنا





لو كان عندي ملف مضغوط باسم update.zip لو حبيت اعرف اسماء الملفات التي بداخله :-

PHP كود :
const string archiveFilePath = @"C:\Users\Fti\Desktop\update.zip";

           
ZipArchive zipArchive ZipFile.Open(archiveFilePathZipArchiveMode.Read);

           foreach (
ZipArchiveEntry entrie in zipArchive.Entries
           {
               
MessageBox.Show(entrie.Name); //update.xml
           
}

            
zipArchive.Dispose(); 


راح يطبع لي في كل مرة اسم ملف في الملف المضغوط

حيث ان مصطلح Entries يعبر عن الملفات التي بداخل الملف المضغوط كما قلنا في بداية الموضوع




--




لو حبيت تعرف حجم ملف معين داخل الملف المضغوط - على سبيل المثال update.xml :-

PHP كود :
const string archiveFilePath = @"C:\Users\Fti\Desktop\update.zip";

           
ZipArchive zipArchive ZipFile.Open(archiveFilePathZipArchiveMode.Read);

           
ZipArchiveEntry zipEntry zipArchive.Entries.Where(entrie => entrie.Name == "update.xml").FirstOrDefault();
           
MessageBox.Show(zipEntry.Length.ToString());

            
zipArchive.Dispose(); 



--


عمل استخراج لملف معين :

PHP كود :
const string archiveFilePath = @"C:\Users\Fti\Desktop\update.zip";

            
ZipArchive zipArchive ZipFile.Open(archiveFilePathZipArchiveMode.Read);

            
ZipArchiveEntry zipEntry zipArchive.Entries.Where(entrie => entrie.Name == "update.xml").FirstOrDefault();
            
zipEntry.ExtractToFile("c:/update.xml");

            
zipArchive.Dispose(); 



--


لو حبيت تجيب بيانات الملف لوحده دون عمل استخراج (يعني جلب bytes) له :-



PHP كود :
byte[] fileData;
            const 
string archiveFilePath = @"C:\Users\Fti\Desktop\update.zip";

            
ZipArchive zipArchive ZipFile.Open(archiveFilePathZipArchiveMode.Read);

            
ZipArchiveEntry zipEntry zipArchive.Entries.Where(entrie => entrie.Name == "update.xml").FirstOrDefault();
            
fileData = new byte[zipEntry.Length];

            
Stream st zipEntry.Open();
            
st.Read(fileData0fileData.Length);

            
zipArchive.Dispose();

           
//now fileData variable is store update.xml Bytes 



--



لو حبيت تعرف حجم الملف update.xml بعد ان تم ضغطه اي (Compression size) :-


PHP كود :
const string archiveFilePath = @"C:\Users\Fti\Desktop\update.zip";

            
ZipArchive zipArchive ZipFile.Open(archiveFilePathZipArchiveMode.Read);

            
ZipArchiveEntry zipEntry zipArchive.Entries.Where(entrie => entrie.Name == "update.xml").FirstOrDefault();
            
MessageBox.Show(zipEntry.CompressedLength.ToString());

            
zipArchive.Dispose(); 



--


اضافة ملف الى الملف المضغوط :-

PHP كود :
const string archiveFilePath = @"C:\Users\Fti\Desktop\update.zip";

            
ZipArchive zipArchive ZipFile.Open(archiveFilePathZipArchiveMode.Update);
            
zipArchive.CreateEntryFromFile("c://filePathToBeArchived""fileName");
            
zipArchive.Dispose(); 








بالتوفيق ان شاء الله


انتهى
الرد }}}
تم الشكر بواسطة: سلوان البهادلي , Japan , السندبااد
#2
تسلم اخي
يمكن استغلال هذة المكتبة لعمل التحديثات و المزامنة لنقل البيانات
الرد }}}
تم الشكر بواسطة: الشاكي لله
#3
سؤال اخي
هل تدعم الضغط مع حماية password
الرد }}}
تم الشكر بواسطة: الشاكي لله
#4
(17-05-14, 03:03 PM)سلوان البهادلي كتب : سؤال اخي
هل تدعم الضغط مع حماية password

للاسف اخي لايمكن عمل ذلك مع هذه المكتبة
الرد }}}
تم الشكر بواسطة:
#5
يعطيك العافية اخي بارك الله فيك
الرد }}}
تم الشكر بواسطة:



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم