ایجاد ZIP در سی شارپ

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

در این مقاله، نحوه انجام عملیات آرشیو ZIP زیر را خواهید آموخت:

کتابخانه زیپ سی شارپ

Aspose.ZIP for .NET یک API قدرتمند و آسان برای زیپ کردن یا باز کردن فایل‌ها و پوشه‌ها در برنامه‌های NET است. همچنین تکنیک های رمزگذاری AES را برای رمزگذاری فایل ها در ZIP در سی شارپ ارائه می دهد. می‌توانید API را از NuGet نصب کنید یا باینری‌های آن را از بخش Downloads دانلود کنید.

ایجاد یک آرشیو ZIP در سی شارپ

مراحل زیر برای فشرده سازی یک فایل با افزودن آن به آرشیو ZIP است:

  • یک شی FileStream برای آرشیو ZIP خروجی ایجاد کنید.
  • فایل منبع را در یک شی FileStream باز کنید.
  • یک شی از کلاس Archive ایجاد کنید.
  • با استفاده از روش Archive.CreateEntry(string, FileStream) فایل را به بایگانی اضافه کنید.
  • بایگانی ZIP را با استفاده از روش Archive.Save(FileStream) ایجاد کنید.

نمونه کد زیر نحوه افزودن یک فایل به آرشیو ZIP با استفاده از سی شارپ را نشان می دهد.

// FileStream را برای خروجی آرشیو ZIP ایجاد کنید
using (FileStream zipFile = File.Open("compressed_file.zip", FileMode.Create))
{
	// فایلی که باید به آرشیو اضافه شود
	using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
	{
		using (var archive = new Archive(new ArchiveEntrySettings()))
		{
			// فایل را به آرشیو اضافه کنید
			archive.CreateEntry("alice29.txt", source1);
			// فایل فشرده
			archive.Save(zipFile);
		}
	}
}

افزودن چندین فایل به آرشیو ZIP در سی شارپ

در صورتی که می خواهید چندین فایل را به یک آرشیو ZIP اضافه کنید، می توانید این کار را با استفاده از یکی از راه های زیر انجام دهید.

چند فایل ZIP سی شارپ با استفاده از FileStream

در این روش از کلاس FileStream برای افزودن فایل ها به آرشیو ZIP با استفاده از روش Archive.CreateEntry(String, FileStream) استفاده می شود. نمونه کد زیر نحوه اضافه کردن چندین فایل به یک ZIP در سی شارپ را نشان می دهد.

// FileStream را برای خروجی آرشیو ZIP ایجاد کنید
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
	// فایل برای اضافه شدن به آرشیو
	using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
	{
		// فایل برای اضافه شدن به آرشیو
		using (FileStream source2 = File.Open("asyoulike.txt", FileMode.Open, FileAccess.Read))
		{
			using (var archive = new Archive())
			{
				// فایل ها را به آرشیو اضافه کنید
				archive.CreateEntry("alice29.txt", source1);
				archive.CreateEntry("asyoulik3.txt", source2);
				// فایل ها را ZIP
				archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII, ArchiveComment = "two files are compressed in this archive" });
			}
		}
	}
}

چند فایل ZIP سی شارپ با استفاده از FileInfo

همچنین می‌توانید از کلاس FileInfo برای افزودن چندین فایل به آرشیو ZIP استفاده کنید. در این روش فایل ها با استفاده از کلاس FileInfo بارگذاری می شوند و با استفاده از روش Archive.CreateEntry(String, FileInfo) به آرشیو ZIP اضافه می شوند. نمونه کد زیر نحوه ZIP کردن چندین فایل را با استفاده از کلاس FileInfo در سی شارپ نشان می دهد.

// FileStream را برای خروجی آرشیو ZIP ایجاد کنید
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
	// فایل هایی که باید به آرشیو اضافه شوند
	FileInfo fi1 = new FileInfo("alice29.txt");
	FileInfo fi2 = new FileInfo("fields.c");

	using (var archive = new Archive())
	{
		// فایل ها را به آرشیو اضافه کنید
		archive.CreateEntry("alice29.txt", fi1);
		archive.CreateEntry("fields.c", fi2);
		// ایجاد آرشیو ZIP
		archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII });
	}
}

فایل های ZIP با استفاده از مسیر

به‌جای استفاده از کلاس‌های FileInfo یا FileStream برای ورودی‌های ZIP، می‌توانید مسیر فایل را مستقیماً به روش Archive.CreateEntry(نام رشته، مسیر رشته، Boolean openImmediately، ArchiveEntrySettings newEntrySettings) ارائه دهید. نمونه کد زیر نحوه ZIP کردن فایل ها را با استفاده از مسیر آنها نشان می دهد.

// FileStream را برای خروجی آرشیو ZIP ایجاد کنید
using (FileStream zipFile = File.Open("archive.zip", FileMode.Create))
{
    // ایجاد آرشیو
    using (var archive = new Archive())
    {
        // افزودن فایل به آرشیو ZIP
        archive.CreateEntry("data.bin", "file.dat");
        archive.Save(zipFile);
    }
}

افزودن پوشه ها به آرشیو ZIP در سی شارپ

می‌توانید یک پوشه را با کتابخانه زیپ سی شارپ ZIP کنید، که می‌تواند جایگزین دیگری برای افزودن چندین فایل به آرشیو ZIP باشد. فقط فایل های منبع را در یک پوشه قرار دهید و آن پوشه را به آرشیو ZIP اضافه کنید. مراحل زیر برای ZIP کردن یک پوشه در سی شارپ آمده است:

  • یک شی از کلاس FileStream برای آرشیو ZIP خروجی ایجاد کنید.
  • یک نمونه از کلاس Archive ایجاد کنید.
  • از کلاس DirectoryInfo برای مشخص کردن پوشه ای که باید فشرده شود استفاده کنید.
  • برای افزودن پوشه به ZIP از روش Archive.CreateEntries(DirectoryInfo) استفاده کنید.
  • بایگانی ZIP را با استفاده از روش Archive.Save(FileStream) ایجاد کنید.

نمونه کد زیر نحوه افزودن یک پوشه به ZIP در سی شارپ را نشان می دهد.

// FileStream را برای خروجی آرشیو ZIP ایجاد کنید
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
	using (Archive archive = new Archive())
	{
		// پوشه ای که باید زیپ شود
		DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
		archive.CreateEntries(corpus);
		// ایجاد آرشیو ZIP
		archive.Save(zipFile);
	}
}

ایجاد یک ZIP محافظت شده با رمز عبور با استفاده از ZipCrypto در سی شارپ

می‌توانید بایگانی‌های ZIP را با استفاده از رمزهای عبور محافظت کنید و رمزگذاری ZipCrypto را اعمال کنید. برای این کار، کلاس ArchiveEntrySettings در سازنده Archive استفاده می شود که نوع رمزگذاری را به عنوان پارامتر دوم می پذیرد.

نمونه کد زیر نحوه ایجاد یک آرشیو ZIP محافظت شده با رمز عبور را با استفاده از ZipCrypto در سی شارپ نشان می دهد.

// FileStream را برای خروجی آرشیو ZIP ایجاد کنید
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
	using (Archive archive = new Archive(new ArchiveEntrySettings(null, new TraditionalEncryptionSettings("p@s$"))))
	{
		// پوشه را به آرشیو اضافه کنید
		DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
		archive.CreateEntries(corpus);
		// ایجاد آرشیو ZIP
		archive.Save(zipFile);
	}
}

C# با رمزگذاری AES، ZIP محافظت شده با رمز عبور ایجاد کنید

Aspose.ZIP for .NET همچنین به شما امکان می دهد از رمزگذاری AES برای محافظت از آرشیوهای ZIP استفاده کنید. می توانید از روش های رمزگذاری AES زیر استفاده کنید:

  • AES128
  • AES192
  • AES256

به منظور اعمال رمزگذاری AES، API کلاس AesEcryptionSettings را ارائه می دهد. نمونه کد زیر نحوه ایجاد یک ZIP محافظت شده با رمز عبور با رمزگذاری AES در سی شارپ را نشان می دهد.

// FileStream را برای خروجی آرشیو ZIP ایجاد کنید
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
	using (Archive archive = new Archive(new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$", EncryptionMethod.AES128))))
	{
		// افزودن پوشه به بایگانی
		DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
		archive.CreateEntries(corpus);
		// ایجاد آرشیو ZIP
		archive.Save(zipFile);
	}
}

حالت فشرده سازی موازی را تنظیم کنید

همچنین می‌توانید API را برای فشرده‌سازی موازی در صورت وجود چندین ورودی پیکربندی کنید. برای این کار، می توانید حالت فشرده سازی موازی را با استفاده از کلاس ParallelOptions مشخص کنید. Aspose.ZIP برای دات نت حالت های فشرده سازی موازی زیر را ارائه می دهد.

  • هرگز - به صورت موازی فشرده نکنید.
  • همیشه - فشرده سازی را به صورت موازی انجام دهید (مراقب کمبود حافظه باشید).
  • خودکار - تصمیم بگیرید که از فشرده سازی موازی در ورودی ها استفاده کنید یا نه. این گزینه ممکن است برخی از ورودی ها را فقط به صورت موازی فشرده کند.

نمونه کد زیر نحوه تنظیم حالت فشرده سازی موازی را در حین فشرده سازی چندین فایل با کتابخانه سی شارپ ZIP Aspose نشان می دهد.

// برای نمونه‌های کامل و فایل‌های داده، لطفاً به https://github.com/aspose-zip/Aspose.ZIP-for-.NET بروید
using (FileStream zipFile = File.Open(dataDir + "UsingParallelismToCompressFiles_out.zip", FileMode.Create))
{
    using (FileStream source1 = File.Open(dataDir + "alice29.txt", FileMode.Open, FileAccess.Read))
    {
        using (FileStream source2 = File.Open(dataDir + "asyoulik.txt", FileMode.Open, FileAccess.Read))
        {
            using (var archive = new Archive())
            {
                archive.CreateEntry("alice29.txt", source1);
                archive.CreateEntry("asyoulik.txt", source2);
                //معیار موازی بودن را تعریف کنید
                var parallelOptions = new ParallelOptions
                {
                    ParallelCompressInMemory = ParallelCompressionMode.Always
                };
                archive.Save(zipFile,
                    new ArchiveSaveOptions()
                    {
                        ParallelOptions = parallelOptions,
                        Encoding = Encoding.ASCII,
                        ArchiveComment = "There are two poems from Canterbury corpus"
                    });
            }
        }
    }
}

درباره کتابخانه C# .NET ZIP بیشتر بدانید

با استفاده از منابع زیر درباره C# ZIP API ما بیشتر کاوش کنید:

آرشیو ZIP را به صورت آنلاین بسازید

همچنین می‌توانید برنامه آنلاین رایگان ما را که بر اساس Aspose.ZIP برای NET است، برای فشرده‌سازی فایل‌ها در بایگانی ZIP امتحان کنید.

نتیجه

در این مقاله نحوه ایجاد آرشیو ZIP به صورت برنامه نویسی در سی شارپ را یاد گرفتید. نمونه‌های کد نحوه افزودن فایل‌ها و پوشه‌ها را در بایگانی ZIP نشان داده‌اند. علاوه بر این، نحوه ایجاد آرشیوهای ZIP محافظت شده با رمز عبور با روش های رمزگذاری ZipCrypto و AES را با استفاده از کتابخانه C# Aspose’ ZIP نیز پوشش داده ایم. در کنار، فشرده سازی موازی ورودی های متعدد نیز در پایان مورد بحث قرار گرفته است. در صورت داشتن هرگونه سوال یا سوال، می توانید از طریق [تالار گفتمان23 ما از ما بپرسید.

همچنین ببینید

Unrar یا Extract Files با استفاده از C#فایل‌ها را در آرشیو ZIP با استفاده از C# از حالت فشرده خارج کنیدایجاد بایگانی 7z (7-Zip) در C# .NET
باز کردن یا استخراج فایل 7z (7zip) در C#.NETایجاد و استخراج بایگانی های GZip با استفاده از C#تبدیل فایل های RAR به آرشیو ZIP در سی شارپ
تبدیل آرشیو ZIP به TAR در سی شارپایجاد یک آرشیو فلت ZIP در سی شارپایجاد بایگانی اجرایی خود استخراج در سی شارپ
ایجاد فایل های TAR.GZ و TAR.XZ در سی شارپحذف فایل‌ها در آرشیو ZIP در سی شارپExtract Nested ZIP Archives in C#
ادغام چندین آرشیو ZIP یا TAR در سی شارپ