حسین احمدی
بنیانگذار توسینسو و برنامه نویس و توسعه دهنده ارشد وب

آموزش کار با فایل های Zip در سی شارپ

چگونه در سی شارپ از فایل های Zip استفاده کنیم؟ یکی از قابلیت هایی که به صورت پیش فرض در زبان سی شارپ وجود دارد، قابلیت ایجاد فایل های فشرده zip است. یعنی شما می توانید یک یا چندین فایل را فشرده کرده و در صورت نیاز یک فایل zip را extract کنید.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

برای یادگیری و آموزش سی شارپ ( آموزش زبان برنامه نویسی سی شارپ ) رایگان به این لینک بروید

در این مطلب می خواهیم با نحوه ایجاد فایل های zip و همچنین extract کردن آن ها در زبان سی شارپ آشنا شویم. در دات نت فضای نامی وجود دارد به نام System.IO.Compression که کلاس های مورد نیاز برای کار با فایل های zip در این فضای نام قرار گرفته است. مهمترین کلاس های این فضای نام، کلاس های زیر هستند:

  1. ZipFile: از این کلاس برای فشرده سازی محتویات یک پوشه و همچنین Extract کردن یک فایل zip می توان استفاده کرد.
  2. ZipArchive: از این کلاس برای خواندن محتویات یک فایل zip استفاده می شود و می توان در کد به آیتم های موجود در یک فایل zip دسترسی داشت
  3. ZipArchiveEntry: زمان استفاده از کلاس ZipArchive از این کلاس برای دسترسی به آیتم های یک فایل zip استفاده می شود
  4. DeflateStream و GZipStream: از این کلاس ها برای ایجاد فایل های فشرده و همچنین خواندن فایل های فشرده استفاده می شود. کلاس ZipFile از این کلاس ها در پشت زمینه استفاده می کند و در حقیقت کار با این کلاس ها توسط کلاس ZipFile راحت تر شده است.

در صورتی که سه کلاس ابتدایی لیست بالا در فضای نام 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 کند. کلاس ZipArchive بیشتر در مواقعی به کار می آید که قصد داریم آیتم های یک فایل zip را به صورت موردی پردازش یا extract کنیم. امیدوارم که این مطلب مورد توجه دوستان عزیز قرار گرفته باشد.


حسین احمدی
حسین احمدی

بنیانگذار توسینسو و برنامه نویس و توسعه دهنده ارشد وب

حسین احمدی ، بنیانگذار TOSINSO ، توسعه دهنده وب و برنامه نویس ، بیش از 12 سال سابقه فعالیت حرفه ای در سطح کلان ، مشاور ، مدیر پروژه و مدرس نهادهای مالی و اعتباری ، تخصص در پلتفرم دات نت و زبان سی شارپ ، طراحی و توسعه وب ، امنیت نرم افزار ، تحلیل سیستم های اطلاعاتی و داده کاوی ...

نظرات