Tạo ZIP trong C#

Lưu trữ ZIP được sử dụng để nén và giữ một hoặc nhiều tệp hoặc thư mục vào một vùng chứa. Kho lưu trữ ZIP đóng gói các tệp và thư mục cũng như giữ thông tin siêu dữ liệu của chúng. Cách sử dụng lưu trữ phổ biến nhất là giảm kích thước tệp để lưu trữ hoặc truyền và áp dụng mã hóa để bảo mật. Ngoài các công cụ nén tệp, các tính năng nén/trích xuất tự động cũng được sử dụng trong các ứng dụng web và máy tính để bàn khác nhau để tải lên, tải xuống, chia sẻ hoặc mã hóa tệp. Bài viết này cũng nhắm đến các tình huống tương tự và trình bày một số cách dễ dàng để nén tệp hoặc thư mục và tạo tệp lưu trữ ZIP theo chương trình bằng C#.

Trong bài viết này, bạn sẽ học cách thực hiện các thao tác lưu trữ ZIP sau:

Thư viện C# ZIP

Aspose.ZIP cho .NET là một API mạnh mẽ và dễ sử dụng để nén hoặc giải nén các tệp và thư mục trong các ứng dụng .NET. Nó cũng cung cấp các kỹ thuật mã hóa AES để mã hóa các tệp trong ZIP trong C#. Bạn có thể cài đặt API từ NuGet hoặc tải xuống các tệp nhị phân của nó từ phần Tải xuống.

Tạo Lưu trữ ZIP trong C#

Sau đây là các bước để nén tệp bằng cách thêm tệp đó vào kho lưu trữ ZIP:

Mẫu mã sau đây cho biết cách thêm tệp vào kho lưu trữ ZIP bằng C#.

// Tạo FileStream cho kho lưu trữ ZIP đầu ra
using (FileStream zipFile = File.Open("compressed_file.zip", FileMode.Create))
{
	// Tệp sẽ được thêm vào kho lưu trữ
	using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
	{
		using (var archive = new Archive(new ArchiveEntrySettings()))
		{
			// Thêm tệp vào kho lưu trữ
			archive.CreateEntry("alice29.txt", source1);
			// tệp ZIP
			archive.Save(zipFile);
		}
	}
}

Thêm nhiều tệp vào Lưu trữ ZIP trong C#

Trong trường hợp bạn muốn thêm nhiều tệp vào kho lưu trữ ZIP, bạn có thể thực hiện bằng một trong các cách sau.

C# ZIP Nhiều tệp bằng FileStream

Trong phương thức này, lớp FileStream được sử dụng để thêm tệp vào kho lưu trữ ZIP bằng phương thức Archive.CreateEntry(String, FileStream). Mẫu mã sau đây cho biết cách thêm nhiều tệp vào một tệp ZIP trong C#.

// Tạo FileStream cho kho lưu trữ ZIP đầu ra
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
	// Tệp sẽ được thêm vào kho lưu trữ
	using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
	{
		// Tệp sẽ được thêm vào kho lưu trữ
		using (FileStream source2 = File.Open("asyoulike.txt", FileMode.Open, FileAccess.Read))
		{
			using (var archive = new Archive())
			{
				// Thêm tệp vào kho lưu trữ
				archive.CreateEntry("alice29.txt", source1);
				archive.CreateEntry("asyoulik3.txt", source2);
				// ZIP các tập tin
				archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII, ArchiveComment = "two files are compressed in this archive" });
			}
		}
	}
}

C# ZIP Nhiều tệp bằng FileInfo

Bạn cũng có thể sử dụng lớp FileInfo để thêm nhiều tệp vào kho lưu trữ ZIP. Trong phương thức này, các tệp sẽ được tải bằng lớp FileInfo và được thêm vào kho lưu trữ ZIP bằng phương thức Archive.CreateEntry(String, FileInfo). Mẫu mã sau đây cho biết cách ZIP nhiều tệp bằng lớp FileInfo trong C#.

// Tạo FileStream cho kho lưu trữ ZIP đầu ra
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
	// Tệp sẽ được thêm vào kho lưu trữ
	FileInfo fi1 = new FileInfo("alice29.txt");
	FileInfo fi2 = new FileInfo("fields.c");

	using (var archive = new Archive())
	{
		// Thêm tệp vào kho lưu trữ
		archive.CreateEntry("alice29.txt", fi1);
		archive.CreateEntry("fields.c", fi2);
		// Tạo kho lưu trữ ZIP
		archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII });
	}
}

Tệp ZIP sử dụng Đường dẫn

Thay vì sử dụng các lớp FileInfo hoặc FileStream cho các mục nhập ZIP, bạn có thể cung cấp trực tiếp đường dẫn của tệp cho phương thức Archive.CreateEntry(String name, String path, Boolean openImmediately, ArchiveEntrySettings newEntrySettings). Mẫu mã sau đây cho biết cách ZIP các tệp bằng đường dẫn của chúng.

// Tạo FileStream cho kho lưu trữ ZIP đầu ra
using (FileStream zipFile = File.Open("archive.zip", FileMode.Create))
{
    // Tạo kho lưu trữ
    using (var archive = new Archive())
    {
        // Thêm tệp vào kho lưu trữ ZIP
        archive.CreateEntry("data.bin", "file.dat");
        archive.Save(zipFile);
    }
}

Thêm thư mục vào Lưu trữ ZIP trong C#

Bạn có thể ZIP một thư mục bằng thư viện C# ZIP, đây có thể là một giải pháp thay thế khác cho việc thêm nhiều tệp vào kho lưu trữ ZIP. Chỉ cần đặt các tệp nguồn vào một thư mục và thêm thư mục đó vào kho lưu trữ ZIP. Sau đây là các bước để ZIP một thư mục trong C#:

Mẫu mã sau đây cho biết cách thêm thư mục vào ZIP trong C#.

// Tạo FileStream cho kho lưu trữ ZIP đầu ra
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
	using (Archive archive = new Archive())
	{
		// Thư mục được nén
		DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
		archive.CreateEntries(corpus);
		// Tạo kho lưu trữ ZIP
		archive.Save(zipFile);
	}
}

Tạo ZIP được bảo vệ bằng mật khẩu bằng ZipCrypto trong C#

Bạn có thể bảo vệ kho lưu trữ ZIP bằng mật khẩu và áp dụng mã hóa ZipCrypto. Đối với điều này, lớp ArchiveEntrySettings được sử dụng trong hàm tạo của Archive chấp nhận loại mã hóa làm tham số thứ hai.

Mẫu mã sau đây cho biết cách tạo kho lưu trữ ZIP được bảo vệ bằng mật khẩu bằng ZipCrypto trong C#.

// Tạo FileStream cho kho lưu trữ ZIP đầu ra
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
	using (Archive archive = new Archive(new ArchiveEntrySettings(null, new TraditionalEncryptionSettings("p@s$"))))
	{
		// Thêm thư mục vào kho lưu trữ
		DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
		archive.CreateEntries(corpus);
		// Tạo kho lưu trữ ZIP
		archive.Save(zipFile);
	}
}

C# Tạo ZIP được bảo vệ bằng mật khẩu bằng Mã hóa AES

Aspose.ZIP cho .NET cũng cho phép bạn áp dụng mã hóa AES để bảo vệ kho lưu trữ ZIP. Bạn có thể sử dụng các phương thức mã hóa AES sau:

  • AES128
  • AES192
  • AES256

Để áp dụng mã hóa AES, API cung cấp lớp AesEcryptionSettings. Mẫu mã sau đây cho biết cách tạo ZIP được bảo vệ bằng mật khẩu bằng mã hóa AES trong C#.

// Tạo FileStream cho kho lưu trữ ZIP đầu ra
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
	using (Archive archive = new Archive(new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$", EncryptionMethod.AES128))))
	{
		// Thêm thư mục để lưu trữ
		DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
		archive.CreateEntries(corpus);
		// Tạo kho lưu trữ ZIP
		archive.Save(zipFile);
	}
}

Đặt chế độ nén song song

Bạn cũng có thể định cấu hình API để nén song song trong trường hợp có nhiều mục nhập. Đối với điều này, bạn có thể chỉ định chế độ nén song song bằng lớp ParallelOptions. Aspose.ZIP cho .NET cung cấp các chế độ nén song song sau đây.

  • Không bao giờ - Không nén song song.
  • Luôn luôn - Thực hiện nén song song (coi chừng hết bộ nhớ).
  • Tự động - Quyết định có sử dụng tính năng nén song song hay không dựa trên các mục nhập. Tùy chọn này chỉ có thể nén một số mục nhập song song.

Mẫu mã sau đây cho biết cách đặt chế độ nén song song trong khi nén nhiều tệp bằng thư viện C# ZIP của Aspose.

// Để biết các ví dụ đầy đủ và tệp dữ liệu, vui lòng truy cập 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);
                //Xác định tiêu chí song song
                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"
                    });
            }
        }
    }
}

Tìm hiểu thêm về Thư viện C# .NET ZIP

Khám phá thêm về C# ZIP API của chúng tôi bằng các tài nguyên sau:

Tạo kho lưu trữ ZIP trực tuyến

Bạn cũng có thể dùng thử ứng dụng trực tuyến miễn phí của chúng tôi, dựa trên Aspose.ZIP cho .NET, để nén các tệp vào kho lưu trữ ZIP.

Sự kết luận

Trong bài viết này, bạn đã học cách tạo các kho lưu trữ ZIP theo chương trình trong C#. Các mẫu mã đã minh họa cách thêm tệp và thư mục vào kho lưu trữ ZIP. Ngoài ra, chúng tôi cũng đã giới thiệu cách tạo các kho lưu trữ ZIP được bảo vệ bằng mật khẩu bằng các phương pháp mã hóa ZipCrypto và AES bằng thư viện ZIP của C# Aspose. Bên cạnh đó, việc nén song song nhiều mục nhập cũng được thảo luận ở phần cuối. Trong trường hợp bạn có bất kỳ câu hỏi hoặc thắc mắc nào, bạn có thể hỏi chúng tôi qua diễn đàn của chúng tôi.

Xem thêm

Unrar hoặc giải nén tệp bằng C#Giải nén tệp trong Kho lưu trữ ZIP bằng C#Tạo Lưu trữ 7z (7-Zip) trong C# .NET
[Mở hoặc giải nén tệp 7z (7zip) trong C# .NET](https://blog.aspose.com/vi/zip/open-extract-7zip-7z-file-unzip-in-csharp-asp-net /)Tạo và giải nén Lưu trữ GZip bằng C#Chuyển đổi tệp RAR thành Lưu trữ ZIP trong C#
Chuyển đổi Lưu trữ ZIP thành TAR trong C#Tạo Lưu trữ ZIP phẳng trong C#Tạo kho lưu trữ tự giải nén có thể thực thi trong C#
Tạo tệp TAR.GZ và TAR.XZ trong C#Xóa tệp trong Kho lưu trữ ZIP bằng C#Trích xuất Lưu trữ ZIP lồng nhau trong C#
Hợp nhất nhiều kho lưu trữ ZIP hoặc TAR trong C#