استخراج ملفات الأرشيف في C# و .NET
فك ملفات ZIP وتنسيقات الأرشيف الأخرى برمجيا داخل تطبيقات .NET.
استخراج الأرشيفات في .NET
Aspose.ZIP for .NET مكتبة مُدارة لفتح الأرشيفات واستخراج محتواها داخل تطبيقات C#. تتيح واجهاتها قراءة إدخالات الأرشيف، استخراج كل العناصر أو عناصر محددة، الحفاظ على بنية المجلدات، وكتابة الناتج إلى مجلد أو stream. تبقى المعالجة داخل التطبيق، لذلك لا تعتمد خدمات الخادم على برامج سطح مكتب أو أدوات سطر أوامر.
تظهر هذه الحاجة في استيراد المستندات، استعادة النسخ الاحتياطية، حزم النشر، معالجة الملفات المرفوعة، وتبادل البيانات الآلي. يمكن استخدام API نفسها داخل ASP.NET، والمهام الخلفية، وتطبيقات سطح المكتب، ووظائف السحابة، وأدوات CI/CD. التطبيق هو من يقرر الصيغ المقبولة، الإدخالات المسموحة، ومكان تخزين الناتج.
تختلف التفاصيل حسب التنسيق. ZIP و7Z وRAR وTAR وCAB ليست حاويات متطابقة؛ لكل منها بنية وطرق ضغط وفئات API مناسبة. هذه الصفحة تقدم المسار العام، بينما تشرح الصفحات الفرعية تفاصيل كل نوع ملف.
ما المقصود بمستخرج ملفات الأرشيف؟
مستخرج الأرشيف يفتح حاوية تضم ملفا أو أكثر ويعيد الملفات المخزنة إلى وجهة يمكن التحكم بها. غالبا تتضمن العملية قراءة البيانات الوصفية، تحديد الملفات والمجلدات، فك الضغط، ثم كتابة الناتج إلى مسار معتمد. الأرشيفات المشفرة تحتاج أيضا إلى بيانات اعتماد وإعدادات فك تشفير مناسبة للتنسيق.
تستخدم كلمات extract وunpack وdecompress بمعان متقاربة. وعندما يقول المطورون unzip files فهم يقصدون استخراج محتوى ZIP تحديدا. أما استخراج الأرشيف فهو أوسع ويشمل 7Z وRAR وTAR وCAB وCPIO وXZ وغيرها.
في الإنتاج، الاستخراج ليس مجرد استدعاء دالة. قد يحتاج التطبيق إلى فحص أسماء الإدخالات، اختيار عناصر محددة، الحفاظ على المجلدات، قبول streams، التعامل مع كلمات المرور، تسجيل الأخطاء، وفرض حدود قبل كتابة أي ملف دائم.
كيف يعمل استخراج الأرشيفات
يتكون المسار المعتاد في C# من سبع مراحل:
- استقبال الأرشيف من مسار محلي أو upload أو stream أو خدمة تخزين.
- تحديد ما إذا كان التنسيق مدعوما في التطبيق.
- فتح الحاوية بالفئة المناسبة لذلك التنسيق.
- فحص الإدخالات عند الحاجة إلى انتقاء أو تصفية.
- التحقق من المسارات وحدود الموارد قبل كتابة الملفات.
- استخراج الإدخالات المقبولة إلى وجهة معزولة.
- تمرير الناتج إلى المرحلة التالية وتنظيف البيانات المؤقتة.
تعتمد فئة الفتح على نوع الإدخال لأن ZIP و7Z وRAR وTAR وCAB لا تشترك في نموذج داخلي واحد. ومع ذلك يستطيع التطبيق تقديم workflow موحد وتوجيه كل حاوية إلى فئة Aspose.ZIP المناسبة.
تنسيقات الأرشيف المتاحة للاستخراج
تتعامل المكتبة مع تنسيقات شائعة مثل ZIP و7Z وRAR وTAR وGZIP وBZIP2 وXZ وLZIP وZ وCPIO وCAB وWIM. تختلف العمليات المتاحة لأن بعض التنسيقات تحتوي على عدة إدخالات، بينما يمثل بعضها stream مضغوطا واحدا أو TAR ملفوفا بطبقة ضغط أخرى.
اختر المعالج الذي يطابق الحاوية الفعلية، ولا تعتمد فقط على امتداد الملف. قبل إدخال تنسيق في pipeline آلية، تحقق من دعم العملية المطلوبة وطريقة التشفير وسلوك streams.
مسارات استخراج شائعة
استخراج الأرشيف بالكامل. استخدم الاستخراج الكامل عندما تكون كل الإدخالات مطلوبة وبعد قبول الملف. حافظ على بنية المجلدات عند الحاجة، وخصص وجهة فريدة لكل عملية حتى لا تختلط مخرجات الطلبات المتزامنة.
قراءة إدخالات محددة فقط. افحص Archive.Entries وطبق قواعد التطبيق قبل الكتابة. هذا مفيد عندما تحتوي الحزمة على أصول كثيرة بينما تحتاج الخدمة إلى مستند أو manifest أو ملف إعدادات فقط.
معالجة stream. تناسب streams ملفات ASP.NET المرفوعة، تخزين الكائنات، قواعد البيانات، والأنظمة المعتمدة على الرسائل. اجعل ملكية stream وعمره واضحين وتجنب تحميل أرشيف غير محدود كاملا في الذاكرة.
فتح محتوى محمي. مرر بيانات الاعتماد عبر إعدادات فك التشفير المتاحة للتنسيق. يجب أن تأتي كلمات المرور من secret store أو إعدادات محمية، ولا تُكتب في logs.
التعامل مع مدخلات كبيرة كمهام محدودة. حدّد الحجم المضغوط، الحجم بعد الاستخراج، عدد الإدخالات، وقت المعالجة، واستخدام التخزين المؤقت داخل التطبيق لا من خلال الثقة بالامتداد.
إضافة Aspose.ZIP إلى مشروع C#
ثبت حزمة Aspose.ZIP من NuGet في مشروع C# يستهدف بيئة .NET مدعومة على Windows أو Linux أو macOS. بعد ذلك أضف namespace المناسب واختر الفئة المطابقة للحاوية. تحتاج العملية أيضا إلى صلاحية قراءة المصدر وكتابة الوجهة ومساحة مؤقتة تكفي لحدود التوسع التي حددتها.
استخدم أمر Package Manager Console التالي:
Package Manager Console
PM> Install-Package Aspose.Zip
مثال C#: فك ملف ZIP
يوضح ZIP المسار العام بشكل مختصر. يفتح الكود الإدخال ويكتب محتواه إلى مجلد وجهة. قبل استخدام هذا النمط مع ملفات خارجية، تحقق من الحاوية ومسارات الإخراج وحدود الموارد.
استخراج محتويات ZIP إلى مجلد
using Aspose.Zip;
using System.IO;
string archivePath = Path.GetFullPath("input.zip");
string outputDirectory = Path.GetFullPath("extracted");
Directory.CreateDirectory(outputDirectory);
using (var archive = new Archive(archivePath))
{
archive.ExtractToDirectory(outputDirectory);
}
استخراج آمن للأرشيفات في الإنتاج
عامل الأرشيفات القادمة من المستخدمين أو الأنظمة الخارجية كمدخلات غير موثوقة. الامتداد المتوقع لا يثبت أن الحاوية صالحة أو آمنة. تحقق من أن المعالج المختار يستطيع قراءة البيانات وارفض الملفات المشوهة أو غير المدعومة.
قبل كتابة أي إدخال، حل مسار الإخراج بالنسبة إلى المجلد المعتمد. ارفض المسارات المطلقة، الانتقال إلى المجلد الأب، وأي نتيجة تخرج من ذلك الجذر. هذا يمنع أسماء الملفات داخل الأرشيف من توجيه الكتابة إلى مكان آخر.
حدد الحجم المضغوط، الحجم الإجمالي بعد الاستخراج، حجم كل إدخال، عدد الإدخالات، عمق التداخل، وقت التنفيذ، والتزامن. استخدم مجلدا مؤقتا خاصا بالمهمة وبصلاحيات محدودة، ولا ترقّ إلا الناتج الذي تم التحقق منه.
يجب أن تحتوي السجلات على معرفات العمليات والحالة، لا كلمات المرور أو أسماء الملفات الخاصة أو محتوى الملفات المستخرجة.
تجربة الاستخراج في المتصفح
يتيح تطبيق الاستخراج المجاني عبر المتصفح اختبار ملفات نموذجية دون تثبيت أي برنامج. يفيد ذلك في التأكد من شكل الناتج قبل تنفيذ المسار في C#.
الأداة المتصفح تركز على الاستخدام التفاعلي. أما مكتبة .NET فهي موجهة للخدمات المتكررة والمعالجة الخلفية ومسارات التخزين المؤسسية حيث تبقى قواعد التحقق والإخراج تحت تحكم التطبيق.
إرشادات استخراج لكل نوع ملف
تختلف التفاصيل حسب الحاوية. يجب أن يوضح كل دليل فرعي:
- فئة Aspose.ZIP الصحيحة لفتح الأرشيف؛
- أمثلة للاستخراج الكامل والانتقائي؛
- سلوك كلمات المرور والتشفير؛
- معالجة streams عند الحاجة؛
- قيود التنسيق وملاحظات الإنتاج؛
- روابط التوثيق ومرجع API المناسبة.
استخدم دليل التنسيق الفعلي عند الانتقال من هذه الصفحة إلى التنفيذ، حتى لا تطبق افتراضات ZIP على 7Z أو RAR أو TAR أو CAB أو صيغ الضغط ذات السلوك المختلف.
موارد استخراج الأرشيف
- استكشف مكتبة الأرشيفات لـ .NET
- اقرأ توثيق المطورين
- تصفح الفئات والطرق
- راجع أمثلة C# على GitHub
- ثبت الحزمة من NuGet
الأسئلة الشائعة حول استخراج الأرشيفات
1. كيف أستخرج ملفات الأرشيف في C#؟
ثبت Aspose.ZIP، وافتح الإدخال بالفئة المطابقة لتنسيقه، ثم استخرج الحاوية بالكامل أو الإدخالات المحددة إلى مجلد أو stream معتمد.
2. كيف يمكنني استخراج ملفات من أرشيف ZIP؟
أنشئ Archive لمدخل ZIP واستدع ExtractToDirectory لاستخراج كل شيء. استخدم Archive.Entries عندما يحتاج التطبيق إلى فحص عناصر محددة أو حفظها فقط.
3. هل استخراج الأرشيف هو نفسه unzip؟
unzip يخص ملفات ZIP تحديدا. أما extraction فهو أوسع ويشمل 7Z وRAR وTAR وCAB وCPIO وWIM.
4. هل يمكن لتطبيقات .NET فتح أرشيفات محمية بكلمة مرور؟
يدعم Aspose.ZIP الوصول بكلمة مرور للتنسيقات التي تسمح بذلك عند توفير بيانات اعتماد وإعدادات فك تشفير صحيحة. التفاصيل تعتمد على نوع الحاوية.
5. كيف أستخرج الأرشيفات المرفوعة بأمان؟
استخدم تخزينا مؤقتا معزولا، تحقق من كل مسار إخراج، قيّد التنسيقات المقبولة، افرض حدود الحجم والوقت، ونظف البيانات المؤقتة بعد انتهاء العملية.