Vi stöter ofta på scenariot där flera ZIP-arkiv är inkapslade i ett annat ZIP. I sådana fall måste du först extrahera den överordnade ZIP-filen och sedan de kapslade arkiven ett efter ett. För att göra det enklare för dig kommer vi i den här artikeln att visa hur man extraherar de kapslade ZIP-arkiven i C# .NET utan att skriva komplex kod.
C# .NET API för att extrahera kapslade ZIP-arkiv
För att packa upp de kapslade ZIP-arkiven kommer vi att använda Aspose.ZIP för .NET. API:et är utformat för att utföra arkiveringsoperationer inifrån .NET-applikationerna. Det låter dig skapa och manipulera populära arkivformat sömlöst. Du kan antingen ladda ner API:s DLL eller installera den med NuGet.
PM> Install-Package Aspose.Zip
Extrahera kapslade ZIP-arkiv i C#
För att demonstrera utvinningen av kapslade ZIP-arkiv har vi skapat följande ZIP-fil som innehåller 3 poster.
Vi kommer att extrahera varje kapslat ZIP-arkiv och spara dess innehåll i en separat mapp. Följande är stegen för att extrahera kapslade ZIP-arkiv i C#.
- Skapa först ett FileStream-objekt för att ladda ZIP-fil.
- Ladda sedan ZIP-filen med klassen Arkiv.
- Iterera genom varje ArchiveEntry i Archive.Entries samling.
- Filtrera ZIP-arkiven i samlingen och utför följande steg för varje arkiv:
- Skapa ett MemoryStream-objekt och kopiera arkivposten till det med metoden ArchiveEntry.Open().CopyTo(Stream).
- Skapa en instans av klassen Arkiv för att ladda det kapslade arkivet.
- Extrahera slutligen arkivet till en mapp med metoden Archive.ExtractToDirectory(string).
Följande kodexempel visar hur man packar upp kapslade ZIP-arkiv i C# .NET.
// Öppna ZIP-fil i en filström
using (FileStream zipFile = File.Open("Archives/nested-archive.zip", FileMode.Open))
{
// Ladda ZIP-fil med Archive class
using (Archive archive = new Archive(zipFile, new ArchiveLoadOptions()))
{
// Få åtkomst till varje post i ZIP-arkivet
foreach(ArchiveEntry entry in archive.Entries)
{
if(entry.Name.ToLower().Contains(".zip"))
{
// Skapa minnesström för kapslat arkiv
MemoryStream nestedArchiveStream = new MemoryStream();
// Kopiera arkiv till minnesström
entry.Open().CopyTo(nestedArchiveStream);
// Ladda det kapslade arkivet från minnesströmmen
using (var nestedArchive = new Archive(nestedArchiveStream))
{
// Extrahera arkiv till disk.
nestedArchive.ExtractToDirectory("Archives/Extracted/"+entry.Name);
}
}
}
}
}
Följande är skärmdumpen av de extraherade ZIP-arkiven.
Skaffa en gratis API-licens
Du kan få en gratis tillfällig licens för att använda Aspose.ZIP för .NET utan utvärderingsbegränsningar.
Slutsats
I den här artikeln har du lärt dig hur du extraherar kapslade ZIP-arkiv i C#. Steg-för-steg-guiden och kodexemplet har visat hur man packar upp varje kapslat arkiv till en separat mapp. Dessutom kan du besöka dokumentation för att utforska andra funktioner i Aspose.ZIP för .NET. Du kan också ställa dina frågor via vårt forum.