استخراج محتوى FileGDB من ZIP في .NET
استخدم Aspose.ZIP for .NET لاستعادة مجموعة FileGDB كاملة من أرشيف ZIP. FileGDB ليست ملفا منفردا بل مجلد .gdb يحتوي على عدة ملفات مترابطة؛ لذلك يعني الاستخراج هنا إعادة إنشاء البنية النسبية التي تم التحقق منها وكتابة كل عضو مطلوب للمجموعة.يناسب ذلك استيراد GIS وخدمات الخرائط ومسارات ETL المكانية. لا تفرد الملفات داخل مجلد واحد، لأن ذلك قد يجعل قاعدة البيانات الجغرافية غير قابلة للاستخدام.
كيفية استخراج ملفات FileGDB من ZIP باستخدام C#
ثبت حزمة Aspose.ZIP for .NET وأضف namespace Aspose.Zip. تتوفر بيانات الإدخال قبل الكتابة، لذلك يمكن للتطبيق فحص ArchiveEntry.Name و ArchiveEntry.IsDirectory و ArchiveEntry.UncompressedSize قبل استخراج أي ملف.
Package Manager Console Command
PM> Install-Package Aspose.Zip
افتح ZIP باستخدام Archive، ابحث عن الإدخالات الواقعة تحت مجلد ينتهي بـ .gdb، تحقق من كل مسار ناتج، ثم استخرج شجرة المجلد كاملة.
خطوات استعادة ملفات FileGDB في C#
- حدد مسار ZIP المصدر وأنشئ مجلد إخراج معزولا.
- افتح الحزمة باستخدام الفئة Archive.
- استعرض Archive.Entries بدلا من فك كل العناصر مباشرة.
- اختر الإدخالات التي تطابق .gdb أو القاعدة الخاصة بالتنسيق.
- ابن مسار إخراج يبقى داخل الجذر المعتمد.
- ارفض الإدخالات التي تتجاوز حد الحجم بعد الاستخراج.
- احفظ كل عنصر مقبول باستخدام ArchiveEntry.Extract.
متطلبات النظام
قبل تشغيل المثال، تأكد من توفر:
- Runtime مدعوم من .NET على Windows أو Linux أو macOS.
- Visual Studio أو Rider أو VS Code أو بيئة تطوير C# أخرى.
- Aspose.ZIP for .NET مثبتا عبر NuGet أو مضافا كمرجع assembly.
- صلاحية قراءة لأرشيف ZIP وصلاحية كتابة لمجلد الإخراج.
- حدود واضحة للحجم والوقت والتخزين عند التعامل مع ملفات غير موثوقة.
مثال C#: اختيار ملفات FileGDB داخل أرشيف ZIP
يفتح المثال حزمة ZIP، يطبق فلترة على الإدخالات غير المجلدية، ثم يكتب الملفات المطابقة إلى وجهة واحدة أو إلى بنية آمنة حسب حاجة التنسيق. في الإنتاج، حدد سياسة واضحة للتعامل مع الأسماء المكررة.
استخراج ملفات FileGDB من ZIP - C#
using Aspose.Zip;
using System;
using System.IO;
string archivePath = Path.GetFullPath("geodata.zip");
string outputDirectory = Path.GetFullPath("extracted-filegdb");
const ulong MaxEntrySize = 100UL * 1024 * 1024;
Directory.CreateDirectory(outputDirectory);
using (var archive = new Archive(archivePath))
{
foreach (ArchiveEntry entry in archive.Entries)
{
string normalizedName = entry.Name.Replace('\\', '/');
int marker = normalizedName.IndexOf(".gdb/", StringComparison.OrdinalIgnoreCase);
if (marker < 0) continue;
string relativePath = normalizedName;
string destinationPath = Path.GetFullPath(
Path.Combine(outputDirectory, relativePath.Replace('/', Path.DirectorySeparatorChar)));
string pathFromRoot = Path.GetRelativePath(outputDirectory, destinationPath);
if (Path.IsPathRooted(pathFromRoot)
|| pathFromRoot.Equals("..", StringComparison.Ordinal)
|| pathFromRoot.StartsWith(
".." + Path.DirectorySeparatorChar,
StringComparison.Ordinal))
{
throw new InvalidDataException("Archive entry resolves outside the output directory.");
}
if (entry.IsDirectory)
{
Directory.CreateDirectory(destinationPath);
continue;
}
if (entry.UncompressedSize > MaxEntrySize)
{
throw new InvalidDataException(
$"Entry '{entry.Name}' exceeds the 100 MB extraction limit.");
}
Directory.CreateDirectory(Path.GetDirectoryName(destinationPath)!);
entry.Extract(destinationPath);
}
}
ملاحظات إنتاجية حول ملفات FileGDB
يجب الحفاظ على البنية الداخلية لـ FileGDB. استخراج عضو واحد أو تسطيح المسارات يمكن أن يتلف مجموعة البيانات.بعد الاستعادة، تحقق من المخطط ونظام الإحداثيات والطبقات باستخدام مكون GIS مناسب.
اعتبارات الأمان والخصوصية
عامل أسماء الإدخالات ومحتوى الأرشيف كمدخلات غير موثوقة. لا تدمج ArchiveEntry.Name مباشرة مع مجلد الإخراج؛ فقد يحتوي الاسم على مسار مطلق أو انتقال إلى مجلد أب. عند الحفاظ على المجلدات، حل المسار النهائي وتأكد من بقائه داخل الجذر المعتمد.اضبط حدودا للحجم المضغوط، الحجم بعد الاستخراج، عدد الإدخالات، وقت التنفيذ، والتزامن. استخدم تخزينا مؤقتا محدود الصلاحيات، نظف الناتج بعد الفشل، وتجنب تسجيل أسماء الملفات الخاصة أو كلمات المرور أو محتوى الملفات.
أسئلة شائعة حول استخراج FileGDB
كيف أستخرج ملفات FileGDB فقط من أرشيف ZIP في C#؟
افتح ZIP باستخدام Archive، استعرض Archive.Entries، طبق شرط .gdb أو قاعدة التنسيق، ثم استدع Extract لكل مسار إخراج مقبول.
هل يتحقق Aspose.ZIP من محتوى ملف FileGDB نفسه؟
لا. Aspose.ZIP يستعيد الملف من الأرشيف. قراءة بنية FileGDB أو التحقق منها أو تحويلها مسؤولية مكون متخصص بذلك التنسيق.
هل يمكن استخدام الفكرة نفسها مع 7Z أو RAR أو TAR؟
نعم من حيث الفكرة، لكن يجب فتح كل حاوية بفئة Aspose.ZIP المناسبة لها، وقد تختلف أنواع الإدخالات والعمليات المتاحة.
كيف أتعامل مع أسماء FileGDB المكررة؟
حدد السياسة قبل الاستخراج: رفض التكرار، إنشاء اسم فريد، أو الحفاظ على بنية مجلدات نسبية بعد التحقق من المسارات.
أدلة استخراج ملفات GIS
استكشف صفحات C# لاستخراج بيانات الخرائط والملفات الجغرافية من الأرشيفات.