Tạo Lưu trữ 7Zip trong C#

Trong bài đăng trước, tôi đã thảo luận về các cách khác nhau để tạo tệp lưu trữ ZIP bằng C#. Bài viết cũng đề cập đến cách tạo các kho lưu trữ ZIP được mã hóa và bảo vệ bằng mật khẩu. Bên cạnh định dạng ZIP, còn có một số định dạng lưu trữ khác được sử dụng phổ biến như 7z, tar, RAR, v.v. Trong số này, định dạng lưu trữ 7z dựa trên kiến trúc mã nguồn mở và nó được sử dụng để nén các tệp và thư mục có tỷ lệ nén cao. Nó cũng hỗ trợ mã hóa AES 256-bit và cũng cho phép mã hóa tên của tệp. Trong bài viết này, tôi sẽ trình bày cách lập trình lưu trữ 7z (7-Zip) bằng C#.

Bài viết này được chia thành các phần sau:

Tất cả các bước và mẫu mã trong bài viết này đều dựa trên Aspose.ZIP for .NET. Do đó, hãy đảm bảo rằng bạn đã cài đặt API bằng một trong các phương pháp sau:

Tạo Lưu trữ 7z (7-Zip) bằng C#

Có thể có hai trường hợp nén tệp vào kho lưu trữ 7z. Bạn chỉ có một tệp duy nhất hoặc có thể có nhiều tệp được nén. Bạn có thể đối phó với cả hai tình huống một cách rõ ràng.

Tạo 7z Archive với Single Entry

Sau đây là các bước để tạo kho lưu trữ 7z với một mục duy nhất.

Mẫu mã sau đây cho biết cách tạo kho lưu trữ 7z (7-Zip) bằng C#.

using (FileStream sevenZipFile = File.Open("archive.7z", FileMode.Create))
{
    using (var archive = new SevenZipArchive())
    {
        archive.CreateEntry("data.bin", "file.dat");
        archive.Save(sevenZipFile);
    }
}

Tạo Lưu trữ 7z với nhiều mục nhập

Trong trường hợp này, bạn có thể đặt các tệp vào một thư mục và chuyển đường dẫn của thư mục tới phương thức SevenZipArchive.CreateEntries(). Sau đây là các bước để thêm nhiều mục nhập tệp vào kho lưu trữ 7z.

Mẫu mã sau đây cho biết cách tạo kho lưu trữ 7z với nhiều mục nhập bằng C#.

using (SevenZipArchive archive = new SevenZipArchive())
{
    archive.CreateEntries(dataDir);
    archive.Save("SevenZip.7z");
}

Tạo Lưu trữ 7z được mã hóa AES bằng C#

7z hỗ trợ mã hóa AES để bảo mật các tệp. Để mã hóa tệp 7z, lớp SevenZipAESEncryptionSettings được sử dụng. Mẫu mã sau đây cho biết cách tạo kho lưu trữ 7z được mã hóa AES bằng C#.

using (var archive = new SevenZipArchive(new SevenZipEntrySettings(null, new SevenZipAESEncryptionSettings("p@s$"))))
{
    archive.CreateEntry("data.bin", new MemoryStream(new byte[] { 0x00, 0xFF }));
    archive.Save("archive.7z");
}

Đặt mật khẩu khác nhau cho các mục 7z bằng C#

Định dạng 7z cũng cho phép bạn chỉ định một mật khẩu khác cho mỗi mục nhập tệp. Chẳng hạn, nếu bạn định nén hai tệp trong kho lưu trữ 7z, bạn có thể chỉ định một mật khẩu khác cho mỗi tệp. Sau đây là các bước để đặt các mật khẩu khác nhau cho các mục 7z.

Mẫu mã sau đây cho biết cách đặt mật khẩu cho mọi mục nhập trong kho lưu trữ 7z.

using (FileStream sevenZipFile = File.Open("archive.7z", FileMode.Create))
{
    FileInfo fi1 = new FileInfo("data1.bin");
    FileInfo fi2 = new FileInfo("data2.bin");
    FileInfo fi3 = new FileInfo("data3.bin");
    using (var archive = new SevenZipArchive())
    {
        archive.CreateEntry("entry1.bin", fi1, false, new SevenZipEntrySettings(new SevenZipStoreCompressionSettings(), new SevenZipAESEncryptionSettings("test1")));
        archive.CreateEntry("entry2.bin", fi2, false, new SevenZipEntrySettings(new SevenZipStoreCompressionSettings(), new SevenZipAESEncryptionSettings("test2")));
        archive.CreateEntry("entry3.bin", fi3, false, new SevenZipEntrySettings(new SevenZipStoreCompressionSettings(), new SevenZipAESEncryptionSettings("test3")));
        archive.Save(sevenZipFile);
    }
}

Sự kết luận

Trong bài viết này, chúng ta đã học cách lập trình lưu trữ 7z bằng C#. Ngoài ra, chúng tôi đã xem cách tạo tệp 7z được mã hóa AES và đặt mật khẩu cho mọi mục nhập tệp. Bạn có thể tìm hiểu thêm về cách nén/giải nén tệp từ tại đây.

Những bài viết liên quan