สร้าง ZIP ใน C#

ไฟล์เก็บถาวร ZIP ใช้เพื่อบีบอัดและเก็บไฟล์หรือโฟลเดอร์ตั้งแต่หนึ่งไฟล์ขึ้นไปไว้ในคอนเทนเนอร์เดียว ไฟล์เก็บถาวร ZIP จะสรุปไฟล์และโฟลเดอร์รวมทั้งเก็บข้อมูลเมตาดาต้า การใช้การเก็บถาวรที่พบบ่อยที่สุดคือการลดขนาดของไฟล์สำหรับการจัดเก็บหรือการส่งผ่าน และใช้การเข้ารหัสเพื่อความปลอดภัย นอกจากเครื่องมือบีบอัดไฟล์แล้ว ฟีเจอร์การบีบอัด/แยกไฟล์อัตโนมัติยังใช้ในเดสก์ท็อปและเว็บแอปพลิเคชันต่างๆ สำหรับการอัปโหลด ดาวน์โหลด แชร์ หรือเข้ารหัสไฟล์ บทความนี้ยังกำหนดเป้าหมายสถานการณ์ที่คล้ายกันและนำเสนอวิธีง่ายๆ ในการบีบอัดไฟล์หรือโฟลเดอร์ และสร้างไฟล์ ZIP โดยทางโปรแกรมโดยใช้ C#

ในบทความนี้ คุณจะได้เรียนรู้วิธีดำเนินการเก็บ ZIP ต่อไปนี้:

ไลบรารี C# ZIP

Aspose.ZIP for .NET เป็น API ที่ทรงพลังและใช้งานง่ายสำหรับการซิปหรือคลายซิปไฟล์และโฟลเดอร์ภายในแอปพลิเคชัน .NET นอกจากนี้ยังมีเทคนิคการเข้ารหัส AES เพื่อเข้ารหัสไฟล์ใน ZIP ใน C # คุณสามารถติดตั้ง API ได้จาก NuGet หรือดาวน์โหลดไบนารีจากส่วน ดาวน์โหลด

สร้างไฟล์ ZIP ใน C#

ต่อไปนี้เป็นขั้นตอนในการบีบอัดไฟล์โดยการเพิ่มลงในไฟล์ ZIP:

  • สร้างวัตถุ FileStream สำหรับไฟล์เก็บถาวร ZIP เอาต์พุต
  • เปิดไฟล์ต้นฉบับในวัตถุ FileStream
  • สร้างวัตถุของคลาส Archive
  • เพิ่มไฟล์ลงในไฟล์เก็บถาวรโดยใช้เมธอด Archive.CreateEntry(string, FileStream)
  • สร้างไฟล์ ZIP โดยใช้วิธี Archive.Save(FileStream)

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีเพิ่มไฟล์ลงในไฟล์ ZIP โดยใช้ C#

// สร้าง 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);
			// ไฟล์ ZIP
			archive.Save(zipFile);
		}
	}
}

เพิ่มไฟล์หลายไฟล์ลงในไฟล์ ZIP ใน C

ในกรณีที่คุณต้องการเพิ่มไฟล์หลายไฟล์ลงในไฟล์ ZIP คุณสามารถทำได้โดยใช้วิธีใดวิธีหนึ่งต่อไปนี้

C# ZIP หลายไฟล์โดยใช้ FileStream

ในวิธีนี้ คลาส FileStream จะใช้เพื่อเพิ่มไฟล์ไปยังไฟล์ ZIP โดยใช้วิธี Archive.CreateEntry(String, FileStream) ตัวอย่างโค้ดต่อไปนี้แสดงวิธีเพิ่มไฟล์หลายไฟล์ใน ZIP ใน C#

// สร้าง 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" });
			}
		}
	}
}

C# ZIP หลายไฟล์โดยใช้ FileInfo

คุณยังสามารถใช้คลาส FileInfo เพื่อเพิ่มไฟล์หลายไฟล์ลงในไฟล์ ZIP ในวิธีนี้ ไฟล์จะถูกโหลดโดยใช้คลาส FileInfo และเพิ่มลงในไฟล์ ZIP โดยใช้วิธี Archive.CreateEntry(String, FileInfo) ตัวอย่างโค้ดต่อไปนี้แสดงวิธี ZIP หลายไฟล์โดยใช้คลาส FileInfo ใน C#

// สร้าง 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(ชื่อสตริง เส้นทางสตริง บูลีน openImmediately ArchiveEntrySettings ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการ 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 ใน C

คุณสามารถ ZIP โฟลเดอร์ด้วยไลบรารี C# ZIP ซึ่งอาจเป็นอีกทางเลือกหนึ่งในการเพิ่มไฟล์หลายไฟล์ไปยังไฟล์ ZIP เพียงใส่ไฟล์ต้นฉบับลงในโฟลเดอร์และเพิ่มโฟลเดอร์นั้นไปยังไฟล์ ZIP ต่อไปนี้เป็นขั้นตอนในการ ZIP โฟลเดอร์ใน C#:

  • สร้างวัตถุของคลาส FileStream สำหรับไฟล์ ZIP เอาต์พุต
  • สร้างอินสแตนซ์ของคลาส Archive
  • ใช้คลาส DirectoryInfo เพื่อระบุโฟลเดอร์ที่จะซิป
  • ใช้เมธอด Archive.CreateEntries(DirectoryInfo) เพื่อเพิ่มโฟลเดอร์ใน ZIP
  • สร้างไฟล์ ZIP โดยใช้วิธี Archive.Save(FileStream)

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีเพิ่มโฟลเดอร์ใน ZIP ใน C#

// สร้าง 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 ใน C

คุณสามารถป้องกันไฟล์ ZIP โดยใช้รหัสผ่านและใช้การเข้ารหัส ZipCrypto สำหรับสิ่งนี้ คลาส ArchiveEntrySettings ถูกใช้ในตัวสร้างของ Archive ที่ยอมรับประเภทการเข้ารหัสเป็นพารามิเตอร์ที่สอง

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีสร้างไฟล์ ZIP ที่ป้องกันด้วยรหัสผ่านโดยใช้ ZipCrypto ใน C#

// สร้าง 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# สร้างรหัสผ่านป้องกัน ZIP ด้วยการเข้ารหัส AES

Aspose.ZIP for .NET ยังให้คุณใช้การเข้ารหัส AES เพื่อป้องกันไฟล์ ZIP คุณสามารถใช้วิธีการเข้ารหัส AES ต่อไปนี้:

  • AES128
  • AES192
  • สศ256

ในการใช้การเข้ารหัส AES API เสนอคลาส AesEcryptionSettings ตัวอย่างโค้ดต่อไปนี้แสดงวิธีสร้างรหัสผ่านป้องกัน ZIP ด้วยการเข้ารหัส AES ใน C#

// สร้าง 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 for .NET มีโหมดการบีบอัดแบบขนานดังต่อไปนี้

  • ไม่เคย - อย่าบีบอัดแบบขนาน
  • เสมอ - ทำการบีบอัดแบบขนาน (ระวังหน่วยความจำไม่เพียงพอ)
  • อัตโนมัติ - ตัดสินใจว่าจะใช้การบีบอัดแบบขนานหรือไม่ตามรายการ ตัวเลือกนี้อาจบีบอัดบางรายการพร้อมกันเท่านั้น

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการตั้งค่าโหมดการบีบอัดแบบขนานในขณะที่ซิปไฟล์หลายไฟล์ด้วยไลบรารี C# 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 Library

สำรวจเพิ่มเติมเกี่ยวกับ C# ZIP API ของเราโดยใช้แหล่งข้อมูลต่อไปนี้:

ทำ ZIP Archives ออนไลน์

คุณยังสามารถลองใช้แอปพลิเคชันออนไลน์ฟรี ซึ่งใช้ Aspose.ZIP for .NET เพื่อบีบอัดไฟล์ลงในไฟล์ ZIP

บทสรุป

ในบทความนี้ คุณได้เรียนรู้วิธีสร้างไฟล์ ZIP โดยทางโปรแกรมใน C# ตัวอย่างโค้ดได้สาธิตวิธีเพิ่มไฟล์และโฟลเดอร์ในไฟล์ ZIP นอกจากนี้ เรายังกล่าวถึงวิธีการสร้างไฟล์ ZIP ที่ป้องกันด้วยรหัสผ่านด้วยวิธีการเข้ารหัส ZipCrypto และ AES โดยใช้ไลบรารี ZIP ของ C# Aspose นอกจากนี้ยังมีการกล่าวถึงการบีบอัดแบบขนานของหลายรายการในตอนท้าย ในกรณีที่คุณมีคำถามหรือข้อสงสัย คุณสามารถถามเราได้ที่ ฟอรัม

ดูสิ่งนี้ด้วย

Unrar หรือแตกไฟล์โดยใช้ C#แตกไฟล์ในไฟล์ ZIP โดยใช้ C#สร้างไฟล์เก็บถาวร 7z (7-Zip) ใน C# .NET
เปิดหรือแตกไฟล์ 7z (7zip) ใน C# .NETสร้างและแยกไฟล์เก็บถาวร GZip โดยใช้ C#แปลงไฟล์ RAR เป็นไฟล์ ZIP ใน C#
แปลงไฟล์ ZIP เป็น TAR ใน C#สร้างไฟล์ ZIP แบบแบนใน C#สร้างไฟล์เก็บถาวรที่ขยายไฟล์ได้เองใน C#
สร้างไฟล์ TAR.GZ และ TAR.XZ ใน C#ลบไฟล์ในไฟล์ ZIP ใน C#แยกไฟล์เก็บถาวร ZIP ที่ซ้อนกันใน C#
รวมไฟล์ ZIP หรือ TAR หลายรายการใน C#