Chúng ta thường gặp trường hợp nhiều tệp lưu trữ ZIP được đóng gói bên trong một tệp ZIP khác. Trong những trường hợp như vậy, trước tiên, bạn phải giải nén ZIP gốc và sau đó là từng tệp lưu trữ lồng nhau. Để giúp bạn dễ dàng hơn, trong bài viết này, chúng tôi sẽ trình bày cách giải nén các tệp nén ZIP lồng nhau trong C# .NET mà không cần viết mã phức tạp.

C# .NET API để giải nén kho lưu trữ ZIP lồng nhau

Để giải nén các lưu trữ ZIP lồng nhau, chúng tôi sẽ sử dụng Aspose.ZIP cho .NET. API được thiết kế để thực hiện các hoạt động lưu trữ từ bên trong các ứng dụng .NET. Nó cho phép bạn tạo và thao tác các định dạng lưu trữ phổ biến một cách liền mạch. Bạn có thể tải xuống DLL của API hoặc cài đặt nó bằng NuGet.

PM> Install-Package Aspose.Zip

Giải nén Lưu trữ ZIP lồng nhau trong C#

Để chứng minh việc trích xuất các tệp lưu trữ ZIP lồng nhau, chúng tôi đã tạo tệp ZIP sau đây chứa 3 mục nhập.

Lưu trữ ZIP lồng nhau

Lưu trữ ZIP lồng nhau

Chúng tôi sẽ giải nén từng kho lưu trữ ZIP lồng nhau và lưu nội dung của nó trong một thư mục riêng biệt. Sau đây là các bước để giải nén các tệp nén ZIP lồng nhau trong C#.

Mẫu mã sau đây cho thấy cách giải nén các tệp nén ZIP lồng nhau trong C# .NET.

// Mở tệp ZIP trong một luồng tệp
using (FileStream zipFile = File.Open("Archives/nested-archive.zip", FileMode.Open))
{
    // Tải tệp ZIP bằng lớp Lưu trữ
    using (Archive archive = new Archive(zipFile, new ArchiveLoadOptions()))
    {
        // Truy cập từng mục nhập trong kho lưu trữ ZIP
        foreach(ArchiveEntry entry in archive.Entries)
        {
            if(entry.Name.ToLower().Contains(".zip"))
            {
                // Tạo luồng bộ nhớ cho kho lưu trữ lồng nhau
                MemoryStream nestedArchiveStream = new MemoryStream();

                // Sao chép kho lưu trữ vào luồng bộ nhớ
                entry.Open().CopyTo(nestedArchiveStream);

                // Tải tệp lưu trữ lồng nhau từ luồng bộ nhớ
                using (var nestedArchive = new Archive(nestedArchiveStream))
                {
                    // Giải nén kho lưu trữ vào đĩa.
                    nestedArchive.ExtractToDirectory("Archives/Extracted/"+entry.Name);
                }                               

            }

        } 
    }
}

Sau đây là ảnh chụp màn hình của các kho lưu trữ ZIP được giải nén.

Giải nén các kho lưu trữ ZIP lồng nhau trong C# .NET

Đã giải nén kho lưu trữ lồng nhau

Nhận giấy phép API miễn phí

Bạn có thể nhận giấy phép tạm thời miễn phí để sử dụng Aspose.ZIP cho .NET mà không có giới hạn đánh giá.

Sự kết luận

Trong bài viết này, bạn đã học cách giải nén các tệp nén ZIP lồng nhau trong C#. Hướng dẫn từng bước và mẫu mã đã trình bày cách giải nén từng kho lưu trữ lồng nhau vào một thư mục riêng biệt. Bên cạnh đó, bạn có thể truy cập tài liệu để khám phá các tính năng khác của Aspose.ZIP cho .NET. Ngoài ra, bạn có thể đặt câu hỏi của mình qua diễn đàn của chúng tôi.

Xem thêm