في كثير من الأحيان ، تحصل على أرشيف ZIP يحتوي على أرشيفات ZIP أخرى بداخله مكونة بنية متداخلة من الأرشيفات. في مثل هذه الحالات ، قد ترغب في الحصول على بنية مسطحة عن طريق استخراج جميع أرشيفات ZIP الداخلية في الأرشيف الخارجي. لإجراء هذه العملية برمجيًا ، توضح هذه المقالة كيفية إنشاء أرشيف ZIP مسطح في C#.
C# .NET API لإنشاء أرشيفات مضغوطة مسطحة
لإنشاء أرشيفات مضغوطة مسطحة ، سنستخدم Aspose.ZIP for .NET. إنها واجهة برمجة تطبيقات أرشفة مصممة لإنشاء واستخراج تنسيقات أرشيف شائعة بما في ذلك ZIP و TAR و GZip و 7z. يمكنك إما تثبيت API من NuGet أو تنزيل DLL الخاص به من قسم التنزيلات.
PM> Install-Package Aspose.Zip
إنشاء أرشيف مضغوط مسطح في C#
لفهم بنية أرشيف ZIP المسطح ، لنأخذ مثالاً. التالي هو أرشيف ZIP يحتوي على أرشيف ZIP آخر بداخله.
parent.zip
├first.txt
├inner.zip
│ ├game.exe
│ └subitem.bin
└picture.gif
بعد تحويل أرشيف ZIP هذا إلى ملف ZIP مسطح ، سيتم استخراج جميع إدخالات ZIP الداخلي في ملف ZIP الأصلي. أخيرًا ، سنحصل على البنية التالية لـ ZIP الأصلي.
flatten.zip
├first.txt
├picture.gif
├game.exe
└subitem.bin
دعونا نرى كيفية إجراء هذا التحول برمجيًا. فيما يلي خطوات إنشاء أرشيف ZIP مسطح في C#.
- أولاً ، قم بتحميل أرشيف ZIP الرئيسي باستخدام فئة الأرشيف.
- بعد ذلك ، أنشئ قوائم لتخزين إدخالات ZIP الداخلية لحذفها من ملف ZIP الأصلي ، والإدخالات المستخرجة وأسمائها.
- بعد ذلك ، قم بإجراء حلقة خلال كل ArchiveEntry في ملف ZIP الأصلي باستخدام مجموعة Archive.Entries.
- لكل إدخال ، قم بإجراء العمليات التالية:
- تحقق مما إذا كان الإدخال عبارة عن أرشيف بتنسيق ZIP باستخدام طريقة ArchiveEntry.Name.EndsWith (". zip"، StringComparison.InvariantCultureIgnoreCase)).
- ثم قم بإضافة إدخال إلى قائمة الإدخالات المراد حذفها.
- افتح الإدخال في كائن MemoryStream باستخدام طريقة ArchiveEntry.Open().CopyTo (MemoryStream).
- كرر خلال إدخالات أرشيف ZIP الداخلي وفي كل تكرار ، نفذ الخطوات التالية.
- أضف اسم الإدخال إلى قائمة الإدخالات التي سيتم إضافتها.
- ثم قم بتحميل الإدخال إلى MemoryStream باستخدام طريقة ArchiveEntry.Open().CopyTo (MemoryStream).
- أخيرًا ، أضف إدخالًا إلى قائمة الإدخالات لإضافتها إلى ZIP الأصلي.
- بعد ذلك ، انتقل إلى قائمة أرشيفات ZIP الداخلية واحذف كل إدخال باستخدام طريقة Archive.DeleteEntry (ArchiveEntry).
- قم بعمل تكرار لقائمة الإدخالات المراد إضافتها إلى ملف ZIP الرئيسي وإضافة كل إدخال باستخدام طريقة Archive.CreateEntry (String، Stream).
- أخيرًا ، احفظ أرشيف ZIP الأصلي باستخدام طريقة Archive.Save (String).
يوضح نموذج التعليمات البرمجية التالي كيفية إنشاء أرشيف ZIP مسطح في C#.
// تحميل أرشيف مضغوط
using (Archive outer = new Archive("Archives/nested-archive.zip"))
{
// قم بإنشاء قائمة لحذف إدخالات ZIP الداخلية بعد الاستخراج
List<ArchiveEntry> entriesToDelete = new List<ArchiveEntry>();
// أنشئ قائمة لإضافة أسماء الملفات في أرشيفات ZIP الداخلية
List<string> namesToInsert = new List<string>();
// قم بإنشاء قائمة لإضافة كائنات دفق للملفات في أرشيفات ZIP الداخلية
List<MemoryStream> contentToInsert = new List<MemoryStream>();
// تكرار الإدخالات في ملف ZIP الأصلي
foreach (ArchiveEntry entry in outer.Entries)
{
// تحقق مما إذا كان الإدخال عبارة عن ملف مضغوط
if (entry.Name.EndsWith(".zip", StringComparison.InvariantCultureIgnoreCase))
{
// أضف إدخالًا إلى القائمة للاحتفاظ بالمرجع من أجل إزالته من الأرشيف لاحقًا
entriesToDelete.Add(entry);
// قم بإنشاء كائن دفق لفتح أرشيف ZIP
MemoryStream innerCompressed = new MemoryStream();
entry.Open().CopyTo(innerCompressed);
// قم بتحميل أرشيف ZIP من كائن الدفق
using (Archive inner = new Archive(innerCompressed))
{
// حلقة حول إدخالات الأرشيف
foreach (ArchiveEntry ie in inner.Entries)
{
// احتفظ باسم الإدخال في القائمة
namesToInsert.Add(ie.Name);
// استخراج دخول الأرشيف إلى كائن تيار
MemoryStream content = new MemoryStream();
ie.Open().CopyTo(content);
// إضافة إدخال إلى القائمة
contentToInsert.Add(content);
}
}
}
}
// احذف أرشيفات ZIP الداخلية
foreach (ArchiveEntry e in entriesToDelete)
outer.DeleteEntry(e);
// أدخل ملفات أرشيفات ZIP الداخلية في أرشيف ZIP الرئيسي
for (int i = 0; i < namesToInsert.Count; i++)
outer.CreateEntry(namesToInsert[i], contentToInsert[i]);
outer.Save("Archives/flatten.zip");
}
احصل على ترخيص API مجاني
يمكنك الحصول على ترخيص مؤقت مجاني لاستخدام Aspose.ZIP لـ .NET بدون قيود تقييم.
استنتاج
في هذه المقالة ، تعلمت كيفية إنشاء أرشيف ZIP مسطح برمجيًا في C#. على وجه الخصوص ، لقد أوضحنا كيفية إنشاء ملف ZIP مسطح عن طريق استخراج أرشيفات ZIP الداخلية في ملف ZIP الأصلي. بصرف النظر عن ذلك ، يمكنك زيارة التوثيق لقراءة المزيد عن Aspose.ZIP لـ .NET. يمكنك أيضًا مشاركة استفساراتك معنا عبر المنتدى.