چگونه در سی شارپ از فایل های Zip استفاده کنیم؟ یکی از قابلیت هایی که به صورت پیش فرض در زبان سی شارپ وجود دارد، قابلیت ایجاد فایل های فشرده zip است.....
در دات نت فضای نامی وجود دارد به نام System.IO.Compression که کلاس های مورد نیاز برای کار با فایل های zip در این فضای نام قرار گرفته است. مهمترین کلاس های این فضای نام، کلاس های زیر هستند:
- ZipFile: از این کلاس برای فشرده سازی محتویات یک پوشه و همچنین Extract کردن یک فایل zip می توان استفاده کرد.
- ZipArchive: از این کلاس برای خواندن محتویات یک فایل zip استفاده می شود و می توان در کد به آیتم های موجود در یک فایل zip دسترسی داشت
- ZipArchiveEntry: زمان استفاده از کلاس ZipArchive از این کلاس برای دسترسی به آیتم های یک فایل zip استفاده می شود
در صورتی که سه کلاس ابتدایی لیست بالا در فضای نام System.IO.Compression وجود نداشتند می بایست به صورت دستی Reference های System.IO.Compression و System.IO.Compression.File را به پروژه اضافه کنید. در مثال زیر ، بوسیله کلاس ZipFile عملیات فشرده سازی و همچنین باز کردن یک فایل Zip را مشاهده می کنید:
using System; using System.IO; using System.IO.Compression; namespace ConsoleApplication { class Program { static void Main(string[] args) { string folderToZip = @"c:\my\foldertozip"; string zipPath = @"c:\my\result.zip"; string extractPath = @"c:\my\extract"; ZipFile.CreateFromDirectory(folderToZip, zipPath); ZipFile.ExtractToDirectory(zipPath, extractPath); } } }
همانطور که در کد بالا ملاحظه می کنید، متد CreateFromDirectory در کلاس ZipFile برای ایجاد یک فایل zip از روی یک پوشه استفاده شده و همچنین متد ExtractToDirectory برای باز کردن یک فایل zip در یک پوشه استفاده می شود. اما بعضی اوقات نیاز است که یک فایل zip را باز کرده و آیتم های داخل آن را پردازش کنیم، بوسیله کلاس های ZipArchive و ZipArchiveEntry به صورت زیر می توان این کار را انجام داد:
using System; using System.IO; using System.IO.Compression; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { string zipPath = @"c:\my\start.zip"; string extractPath = @"c:\my\extract"; using (ZipArchive archive = ZipFile.OpenRead(zipPath)) { foreach (ZipArchiveEntry entry in archive.Entries) { if (entry.FullName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase)) { entry.ExtractToFile(Path.Combine(extractPath, entry.FullName)); } } } } } }
همانطور که در کد بالا مشاهده می کنید، بوسیله متد OpenRead در کلاس ZipFile، ابتدا فایل zip مورد نظر را باز کرده و سپس بوسیله خصوصیت Entries که در کلاس ZipArchive تعریف شده توانستیم به آیتم های موجود در فایل zip دسترسی داشته باشیم. در کد بالا و بوسیله خصوصیت FullName چک می کنیم که اگر پسوند فایل txt بود، فایل را extract کند.
تمام.