Muitas vezes nos deparamos com o cenário em que vários arquivos ZIP são encapsulados dentro de outro ZIP. Nesses casos, primeiro você deve extrair o ZIP pai e depois os arquivos aninhados um por um. Para facilitar as coisas para você, neste artigo, demonstraremos como extrair os arquivos ZIP aninhados em C# .NET sem escrever código complexo.
API C# .NET para extrair arquivos ZIP aninhados
Para descompactar os arquivos ZIP aninhados, utilizaremos Aspose.ZIP for .NET. A API foi projetada para realizar operações de arquivamento de dentro dos aplicativos .NET. Ele permite que você crie e manipule formatos de arquivo populares sem problemas. Você pode baixar a DLL da API ou instalá-la usando NuGet.
PM> Install-Package Aspose.Zip
Extrair arquivos ZIP aninhados em C#
Para demonstrar a extração de arquivos ZIP aninhados, criamos o seguinte arquivo ZIP que contém 3 entradas.
Vamos extrair cada arquivo ZIP aninhado e salvar seu conteúdo em uma pasta separada. A seguir estão as etapas para extrair arquivos ZIP aninhados em C#.
- Primeiro, crie um objeto FileStream para carregar o arquivo ZIP.
- Em seguida, carregue o arquivo ZIP usando a classe Arquivo.
- Itere através de cada ArchiveEntry na coleção Archive.Entries.
- Filtre os arquivos ZIP na coleção e, para cada arquivo, execute as seguintes etapas:
- Crie um objeto MemoryStream e copie a entrada do arquivo para ele usando o método ArchiveEntry.Open().CopyTo(Stream).
- Crie uma instância da classe Archive para carregar o arquivo aninhado.
- Finalmente, extraia o arquivo em uma pasta usando o método Archive.ExtractToDirectory(string).
O exemplo de código a seguir mostra como descompactar arquivos ZIP aninhados em C# .NET.
// Abrir arquivo ZIP em um fluxo de arquivos
using (FileStream zipFile = File.Open("Archives/nested-archive.zip", FileMode.Open))
{
// Carregar arquivo ZIP usando a classe Archive
using (Archive archive = new Archive(zipFile, new ArchiveLoadOptions()))
{
// Acesse cada entrada no arquivo ZIP
foreach(ArchiveEntry entry in archive.Entries)
{
if(entry.Name.ToLower().Contains(".zip"))
{
// Criar fluxo de memória para arquivo aninhado
MemoryStream nestedArchiveStream = new MemoryStream();
// Copiar arquivo para fluxo de memória
entry.Open().CopyTo(nestedArchiveStream);
// Carregar o arquivo aninhado do fluxo de memória
using (var nestedArchive = new Archive(nestedArchiveStream))
{
// Extraia o arquivo para o disco.
nestedArchive.ExtractToDirectory("Archives/Extracted/"+entry.Name);
}
}
}
}
}
A seguir está a captura de tela dos arquivos ZIP extraídos.
Obtenha uma licença de API gratuita
Você pode obter uma licença temporária gratuita para usar o Aspose.ZIP para .NET sem limitações de avaliação.
Conclusão
Neste artigo, você aprendeu como extrair arquivos ZIP aninhados em C#. O guia passo a passo e o exemplo de código demonstraram como descompactar cada arquivo aninhado em uma pasta separada. Além disso, você pode visitar documentação para explorar outros recursos do Aspose.ZIP para .NET. Além disso, você pode fazer suas perguntas através do nosso fórum.