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.
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#.
- Đầu tiên, tạo một đối tượng FileStream để tải tệp ZIP.
- Sau đó, tải tệp ZIP bằng lớp Lưu trữ.
- Lặp lại từng ArchiveEntry trong bộ sưu tập Archive.Entries.
- Lọc các tệp lưu trữ ZIP trong bộ sưu tập và đối với mỗi tệp lưu trữ, hãy thực hiện các bước sau:
- Tạo một đối tượng MemoryStream và sao chép mục nhập lưu trữ vào nó bằng phương thức ArchiveEntry.Open(). CopyTo (Stream).
- Tạo một thể hiện của lớp Archive để tải kho lưu trữ lồng nhau.
- Cuối cùng, giải nén kho lưu trữ vào một thư mục bằng phương thức Archive.ExtractToDirectory (string).
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.
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.