العمل مع أرشيفات ZIP في C# (.NET): دليل شامل

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع أرشيفات ZIP في C# (.NET)



في التطوير الحديث على منصة .NET، يعد العمل مع الأرشيفات من المهام الشائعة. سواء كان ذلك لتغليف السجلات، إنشاء نسخ احتياطية، أو نقل البيانات عبر الشبكة - فإن القدرة على ضغط وفك ضغط الملفات بكفاءة ضرورية لكل مطور C#. في هذه المقالة، سنشرح بالتفصيل نهجين رئيسيين: مساحة الأسماء المضمنة System.IO.Compression والمكتبة الخارجية SharpZipLib.



الأدوات المضمنة في .NET: System.IO.Compression



بدءًا من .NET Framework 4.5، توفر المنصة واجهة برمجة تطبيقات أصلية للعمل مع أرشيفات ZIP. توجد الفئات الرئيسية في مساحة الأسماء System.IO.Compression.



إنشاء أرشيف ZIP



لإنشاء أرشيف، يتم استخدام الفئة ZipArchive مع ZipFile:



using System.IO;using System.IO.Compression;

string sourceDirectory = @"C:\\Data\\Reports";string zipPath = @"C:\\Archives\\reports.zip";

if (File.Exists(zipPath)) File.Delete(zipPath);

ZipFile.CreateFromDirectory(sourceDirectory, zipPath);Console.WriteLine("تم إنشاء الأرشيف: " + zipPath);


استخراج الأرشيف



يتم فك الضغط بطريقة مماثلة - باستخدام طريقة ExtractToDirectory:



string extractPath = @"C:\\Data\\Extracted";ZipFile.ExtractToDirectory(zipPath, extractPath);Console.WriteLine("تم استخراج الأرشيف إلى: " + extractPath);


العمل مع الإدخالات الفردية



للتحكم الدقيق، استخدم ZipArchive مباشرة:



using (FileStream zipStream = new FileStream(zipPath, FileMode.Open))using (ZipArchive archive = new ZipArchive(zipStream, ZipArchiveMode.Read)){    foreach (ZipArchiveEntry entry in archive.Entries)    {        Console.WriteLine($"الملف: {entry.FullName}, الحجم: {entry.Length} بايت");                // استخراج ملف معين        entry.ExtractToFile(Path.Combine(extractPath, entry.FullName), true);    }}


مكتبة SharpZipLib



SharpZipLib هي مكتبة خارجية قوية مفتوحة المصدر، توفر إمكانيات متقدمة مقارنة بالأدوات المضمنة. تدعم المزيد من التنسيقات (GZip, BZip2, Tar) وتمنح تحكمًا أكثر مرونة في عملية الضغط.



تثبيت SharpZipLib



قم بتثبيت المكتبة عبر NuGet Package Manager:



Install-Package SharpZipLib


أو عبر .NET CLI:



dotnet add package SharpZipLib


إنشاء أرشيف باستخدام SharpZipLib



using ICSharpCode.SharpZipLib.Zip;using ICSharpCode.SharpZipLib.Core;

string outputZip = @"C:\\Archives\\backup.zip";string[] filesToZip = Directory.GetFiles(@"C:\\Data\\Files", "*.*", SearchOption.AllDirectories);

using (FileStream fsOut = File.Create(outputZip))using (ZipOutputStream zipStream = new ZipOutputStream(fsOut)){ zipStream.SetLevel(9); // أقصى ضغط (0-9)

foreach (string filename in filesToZip) { FileInfo fi = new FileInfo(filename); string entryName = ZipEntry.CleanName(fi.Name); ZipEntry newEntry = new ZipEntry(entryName); newEntry.DateTime = fi.LastWriteTime; newEntry.Size = fi.Length;

zipStream.PutNextEntry(newEntry);

byte[] buffer = new byte[4096]; using (FileStream fsInput = File.OpenRead(filename)) { StreamUtils.Copy(fsInput, zipStream, buffer); } zipStream.CloseEntry(); }}


استخراج أرشيف باستخدام SharpZipLib



string inputZip = @"C:\\Archives\\backup.zip";string outputDir = @"C:\\Data\\Restored";

using (FileStream fsIn = File.OpenRead(inputZip))using (ZipInputStream zipStream = new ZipInputStream(fsIn)){ ZipEntry entry; while ((entry = zipStream.GetNextEntry()) !=

توصيات