Często spotykamy się ze scenariuszem, w którym wiele archiwów ZIP jest zamkniętych w innym pliku ZIP. W takich przypadkach najpierw należy rozpakować nadrzędny plik ZIP, a następnie jeden po drugim zagnieżdżone archiwa. Aby Ci to ułatwić, w tym artykule zademonstrujemy, jak wyodrębnić zagnieżdżone archiwa ZIP w C# .NET bez pisania skomplikowanego kodu.
C# .NET API do wyodrębniania zagnieżdżonych archiwów ZIP
Aby rozpakować zagnieżdżone archiwa ZIP, użyjemy Aspose.ZIP for .NET. API jest przeznaczone do wykonywania operacji archiwizacji z poziomu aplikacji .NET. Pozwala bezproblemowo tworzyć popularne formaty archiwów i nimi manipulować. Możesz pobrać bibliotekę DLL interfejsu API lub zainstalować ją za pomocą NuGet.
PM> Install-Package Aspose.Zip
Wyodrębnij zagnieżdżone archiwa ZIP w C#
Aby zademonstrować wyodrębnianie zagnieżdżonych archiwów ZIP, utworzyliśmy następujący plik ZIP, który zawiera 3 wpisy.
Rozpakujemy każde zagnieżdżone archiwum ZIP i zapiszemy jego zawartość w osobnym folderze. Poniżej przedstawiono kroki wyodrębniania zagnieżdżonych archiwów ZIP w języku C#.
- Najpierw utwórz obiekt FileStream, aby załadować plik ZIP.
- Następnie załaduj plik ZIP przy użyciu klasy Archive.
- Przejrzyj każdy element ArchiveEntry w kolekcji Archive.Entries.
- Przefiltruj archiwa ZIP w kolekcji i dla każdego archiwum wykonaj następujące czynności:
- Utwórz obiekt MemoryStream i skopiuj do niego wpis archiwum metodą ArchiveEntry.Open().CopyTo(Stream).
- Utwórz instancję klasy Archive, aby załadować zagnieżdżone archiwum.
- Na koniec rozpakuj archiwum do folderu za pomocą metody Archive.ExtractToDirectory(string).
Poniższy przykładowy kod pokazuje, jak rozpakować zagnieżdżone archiwa ZIP w języku C# .NET.
// Otwórz plik ZIP w strumieniu plików
using (FileStream zipFile = File.Open("Archives/nested-archive.zip", FileMode.Open))
{
// Załaduj plik ZIP przy użyciu klasy Archive
using (Archive archive = new Archive(zipFile, new ArchiveLoadOptions()))
{
// Uzyskaj dostęp do każdego wpisu w archiwum ZIP
foreach(ArchiveEntry entry in archive.Entries)
{
if(entry.Name.ToLower().Contains(".zip"))
{
// Utwórz strumień pamięci dla zagnieżdżonego archiwum
MemoryStream nestedArchiveStream = new MemoryStream();
// Skopiuj archiwum do strumienia pamięci
entry.Open().CopyTo(nestedArchiveStream);
// Załaduj zagnieżdżone archiwum ze strumienia pamięci
using (var nestedArchive = new Archive(nestedArchiveStream))
{
// Wypakuj archiwum na dysk.
nestedArchive.ExtractToDirectory("Archives/Extracted/"+entry.Name);
}
}
}
}
}
Poniżej znajduje się zrzut ekranu wyodrębnionych archiwów ZIP.
Uzyskaj bezpłatną licencję API
Możesz otrzymać darmową tymczasową licencję na korzystanie z Aspose.ZIP for .NET bez ograniczeń ewaluacyjnych.
Wniosek
W tym artykule nauczyłeś się, jak wyodrębnić zagnieżdżone archiwa ZIP w języku C#. Przewodnik krok po kroku i przykładowy kod pokazują, jak rozpakować każde zagnieżdżone archiwum do osobnego folderu. Poza tym możesz odwiedzić dokumentację, aby poznać inne funkcje Aspose.ZIP for .NET. Możesz także zadawać pytania za pośrednictwem naszego forum.