التنبيهات التالية ظهرت :
Warning [2] count(): Parameter must be an array or an object that implements Countable - Line: 864 - File: showthread.php PHP 7.4.33 (Linux)
File Line Function
/showthread.php 864 errorHandler->error



تقييم الموضوع :
  • 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 , السندبااد


الردود في هذا الموضوع
التعامل مع ملفات zip - بواسطة الشاكي لله - 17-05-14, 01:54 PM
RE: التعامل مع ملفات zip - بواسطة nani49 - 12-02-16, 02:48 PM


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


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