برنامه نویسی

C# Zip Archive Entry – DEV Community

پیوندها:

معرفی

در حالی که اکوسیستم دات نت کتابخانه های قوی را برای کار با فایل های ZIP فراهم می کند، توسعه دهندگان اغلب با محدودیت هایی به دلیل کلاس های داخلی یا مهر و موم شده مواجه می شوند که از گسترش یا اصلاح ساده جلوگیری می کند. در این مقاله، من درباره چرا و چگونگی ایجاد FastZipEntry، یک کتابخانه دات نت که برای بازیابی موثر ورودی های خاص از آرشیو ZIP طراحی شده است صحبت خواهم کرد. بدون استخراج کل آرشیو یا تکرار در تمام ورودی ها.

انگیزه

محدودیت در کتابخانه های موجود

کتابخانه های مدیریت ZIP موجود در دات نت، به ویژه آنهایی که توسط مایکروسافت ارائه شده است، قدرتمند هستند اما گاهی اوقات محدود کننده هستند. بسیاری از کلاس‌ها و روش‌های مفید به‌عنوان داخلی یا مهر و موم شده علامت‌گذاری شده‌اند، به این معنی که نمی‌توان آنها را خارج از محدوده اصلی خود گسترش داد یا تغییر داد. این محدودیت زمانی که نیاز دارید عملکرد را مطابق با نیازهای خاص تغییر دهید یا گسترش دهید، چالش مهمی ایجاد می کند.

نیاز به بازیابی ورودی کارآمد

در بسیاری از سناریوها، ممکن است نیاز داشته باشید که به یک ورودی خاص در بایگانی ZIP بدون استخراج کل بایگانی یا بارگیری تمام ورودی‌ها در حافظه دسترسی داشته باشید. این امر به ویژه برای آرشیوهای بزرگ که در آن عملکرد و مصرف حافظه به نگرانی های حیاتی تبدیل می شود، مهم است. متأسفانه System.IO.Compression.ZipArchive پیش‌فرض راه ساده‌ای برای دستیابی به این هدف ارائه نمی‌کند.

برای غلبه بر این محدودیت ها تصمیم گرفتم ایجاد کنم FastZipEntry NuGet، کتابخانه ای که امکان بازیابی کارآمد ورودی های خاص از آرشیو ZIP را فراهم می کند. این کتابخانه از کدهای اصلاح شده مایکروسافت استفاده می کند System.IO.Compression اما عملکرد خود را برای رفع نیازهای ذکر شده در بالا گسترش می دهد.

ویژگی های کلیدی

  • بازیابی کارآمد: ورودی های ZIP خاص را با نام بدون استخراج کل بایگانی مکان یابی و بازیابی کنید.
  • رفع فشار: شامل پشتیبانی و دسترسی به Deflate64 الگوریتم برای رفع فشار، همچنین از پایگاه کد مایکروسافت تهیه شده است.

جزئیات پیاده سازی

استفاده از کد منبع مایکروسافت

هسته اصلی FastZipEntry بر اساس کد منبع مایکروسافت است System.IO.Compression کتابخانه، که تحت مجوز MIT در دسترس است. متأسفانه، به دلیل ماهیت داخلی و مهر و موم شده بسیاری از کلاس ها، مجبور شدم کد لازم را برای فعال کردن عملکرد مورد نیاز کپی و اصلاح کنم. این رویکرد، اگرچه ایده آل نیست، اما برای ارائه انعطاف پذیری و مزایای عملکرد ضروری بود FastZipEntry ارائه می دهد.

اضافه کردن پشتیبانی از Deflate64

علاوه بر عملکرد اصلی، من آن را نیز یکپارچه کردم Deflate64 الگوریتم برای رفع فشار این الگوریتم که از کد منبع مایکروسافت گرفته شده است، برای مدیریت آرشیوهایی که از این روش فشرده سازی خاص استفاده می کنند ضروری است. با گنجاندن این در FastZipEntry، مطمئن شدم که کتابخانه می تواند طیف وسیع تری از آرشیوهای ZIP را مدیریت کند.

مثال استفاده

using System.IO;
using System.Text;
using FastZipEntry;

// Open a ZIP file and create a ZipEntryAccess instance
using FileStream zipFileStream = new FileStream("path/to/your.zip", FileMode.Open, FileAccess.Read);
ZipEntryAccess zipEntryAccess = new ZipEntryAccess(zipFileStream, Encoding.UTF8);

// Retrieve a specific entry from the ZIP file
string entryName = "desired_entry.txt";
ZipEntry? entry = zipEntryAccess.RetrieveZipEntry(entryName, StringComparison.OrdinalIgnoreCase);

if (entry != null)
{
    // Use the entry (e.g., decompress it)
    using Stream entryStream = entry.Open();
    using FileStream outputStream = new FileStream("path/to/extracted/desired_entry.txt", FileMode.Create, FileAccess.Write);
    entryStream.CopyTo(outputStream);
}
else
{
    Console.WriteLine("Entry not found.");
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نتیجه

امیدوارم FastZipEntry در پروژه های شما مفید است، و من از هر گونه مشارکت یا بازخورد استقبال می کنم.

  • می توانید بسته FastZipEntry را از مخزن NuGet پیدا و نصب کنید.
  • همچنین می توانید کد منبع موجود در مخزن GitHub این پروژه را بررسی کنید.

قدردانی

این کتابخانه بر اساس کد اصلاح شده از مخزن Microsoft System.IO.Compression است و شامل این است Deflate64 الگوریتم از همان منبع

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا