17-05-14, 01:54 PM
(آخر تعديل لهذه المشاركة : 17-05-14, 02:31 PM {2} بواسطة الشاكي لله.)
السلام عليكم ورحمة الله وبركاته
كما نعلم ان ملفات Zip هي ملفات عبارة عن حزم تحتوي في داخلها على ملفات
كل ملف مضغوط داخل الZip يسمى Entrie .
فقط في هذا المقال سأعرض اكواد تقوم بالتعامل مع ملف zip
وذلك باستعمال مكتبة من مكتبات الدوت نت التي تم انشائها في الفريم وورك 4.5
لذلك اتبع الخطوات :-
كل ملف مضغوط داخل ال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.Fastest, true);
كلشيئ واضح في الكود مايحتاج شرح .
--
ثانيا : استخراج ملف 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(archiveFilePath, ZipArchiveMode.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(archiveFilePath, ZipArchiveMode.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(archiveFilePath, ZipArchiveMode.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(archiveFilePath, ZipArchiveMode.Read);
ZipArchiveEntry zipEntry = zipArchive.Entries.Where(entrie => entrie.Name == "update.xml").FirstOrDefault();
fileData = new byte[zipEntry.Length];
Stream st = zipEntry.Open();
st.Read(fileData, 0, fileData.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(archiveFilePath, ZipArchiveMode.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(archiveFilePath, ZipArchiveMode.Update);
zipArchive.CreateEntryFromFile("c://filePathToBeArchived", "fileName");
zipArchive.Dispose();
بالتوفيق ان شاء الله
انتهى
انتهى