Extrair Arquivos em C# e .NET

Descompacte ZIP e outros formatos de arquivo programaticamente em aplicações .NET.

Extração de Arquivos no .NET

Aspose.ZIP for .NET é uma biblioteca gerenciada para abrir arquivos compactados e extrair seu conteúdo em aplicações C#. As APIs permitem ler entradas do arquivo, extrair tudo ou apenas itens selecionados, preservar a estrutura de diretórios e gravar a saída em uma pasta ou stream. O processamento permanece dentro da aplicação, então fluxos de servidor não dependem de software desktop nem de utilitários de linha de comando.

Casos comuns incluem ingestão de documentos, restauração de backup, pacotes de implantação, processamento de uploads e troca automatizada de dados. A mesma API pode ser usada em serviços ASP.NET, workers em segundo plano, aplicações desktop, jobs em nuvem e pipelines CI/CD.

O fluxo exato varia por formato. ZIP, 7Z, RAR, TAR e CAB usam estruturas de contêiner, métodos de compressão e classes de API diferentes. Esta visão geral explica o processo comum de extração; os guias por formato indicam a classe, as opções e as limitações adequadas.

O que é um extrator de arquivos?

Um extrator abre um contêiner que armazena um ou mais arquivos e restaura o conteúdo salvo. Normalmente ele lê metadados, identifica entradas e diretórios, descompacta os dados e grava o resultado em um local aprovado. Arquivos criptografados também exigem credenciais válidas e configurações compatíveis com o formato.

Os termos extract, unpack e decompress costumam ser usados para operações parecidas. Quando um desenvolvedor fala em descompactar ZIP, ele quer recuperar o conteúdo de um contêiner ZIP. Extração de arquivos é uma operação mais ampla e também cobre formatos como 7Z, RAR, TAR, CAB, CPIO e XZ.

Em produção, a extração é mais do que uma chamada de método. A aplicação pode precisar inspecionar nomes de entradas, selecionar itens específicos, preservar pastas, aceitar streams, lidar com senhas, relatar falhas e aplicar limites antes de gravar em armazenamento permanente.

Como funciona a extração de arquivos

  1. Receber o arquivo de um caminho local, upload, stream ou serviço de armazenamento.
  2. Verificar se a aplicação oferece suporte ao formato.
  3. Abrir o contêiner com a classe de API projetada para esse formato.
  4. Inspecionar as entradas quando filtragem ou extração seletiva for necessária.
  5. Validar caminhos de saída e limites de recursos antes de gravar arquivos.
  6. Extrair as entradas aprovadas para um destino isolado.
  7. Encaminhar a saída para a próxima etapa da aplicação e remover dados temporários.

Formatos disponíveis para extração

A biblioteca trabalha com formatos populares de arquivo e compressão, incluindo ZIP, 7Z, RAR, TAR, GZIP, BZIP2, XZ, LZIP, Z, CPIO, CAB e WIM. As operações disponíveis variam, pois alguns formatos contêm várias entradas, enquanto outros representam um único stream compactado ou um contêiner TAR envolvido por outra camada de compressão.

Fluxos comuns de extração

Descompactar o arquivo inteiro. Use extração completa quando todas as entradas forem necessárias e a entrada já tiver passado pela validação. Preserve a hierarquia original quando necessário e atribua um destino único a cada job.

Ler somente entradas selecionadas. Percorra Archive.Entries e aplique as regras da aplicação antes de gravar dados. Isso é útil quando o pacote contém muitos recursos, mas o processo precisa apenas de um documento, manifesto, configuração ou pasta conhecida.

Processar um stream. Entrada baseada em stream combina com uploads ASP.NET, object storage, bancos de dados e sistemas orientados a mensagens. Deixe explícitos propriedade e ciclo de vida do stream e evite carregar um arquivo sem limite inteiro em memória.

Abrir conteúdo protegido. Forneça credenciais pelas configurações de descriptografia disponíveis para o formato. Senhas devem vir de configuração protegida ou cofre de segredos e nunca devem ser registradas em logs.

Tratar entradas grandes como jobs limitados. Restrinja tamanho compactado, tamanho extraído, número de entradas, tempo de processamento e uso de armazenamento temporário.

Adicionar Aspose.ZIP a um projeto C#

Instale o pacote NuGet Aspose.ZIP em um projeto C# direcionado a um ambiente .NET compatível no Windows, Linux ou macOS. Depois, importe o namespace necessário e selecione a classe correspondente ao contêiner de entrada.

Package Manager Console

PM> Install-Package Aspose.Zip

Exemplo em C#: descompactar um arquivo ZIP

ZIP fornece um exemplo conciso do fluxo comum. O código abre a entrada e grava o conteúdo em um diretório de destino. Antes de usar esse padrão com arquivos externos, valide o contêiner, os caminhos de saída e os limites de recursos.

Extrair o conteúdo ZIP para um diretório

using Aspose.Zip;
using System.IO;

string archivePath = Path.GetFullPath("input.zip");
string outputDirectory = Path.GetFullPath("extracted");

Directory.CreateDirectory(outputDirectory);

using (var archive = new Archive(archivePath))
{
    archive.ExtractToDirectory(outputDirectory);
}

Extração segura em produção

Trate arquivos recebidos de usuários ou sistemas externos como entrada não confiável. Uma extensão esperada não prova que o contêiner é válido ou seguro. Verifique se o manipulador escolhido consegue interpretar os dados e rejeite entradas corrompidas ou sem suporte.

Antes de gravar uma entrada, resolva o caminho de saída em relação ao destino aprovado. Rejeite caminhos absolutos, traversal para diretórios superiores e qualquer resultado fora do diretório permitido.

Defina limites para tamanho compactado, tamanho extraído total e por entrada, número de entradas, profundidade de aninhamento, tempo de execução e concorrência. Use uma pasta temporária específica para o job com permissões restritas e limpe dados após sucesso ou falha.

Testar extração no navegador

O aplicativo online gratuito de extração permite testar entradas de exemplo sem instalar software. Ele ajuda a conferir a saída esperada antes de implementar o fluxo em C#.

Guias de extração por tipo de arquivo

Os detalhes de implementação mudam conforme o contêiner e o formato armazenado. Um guia específico deve indicar a classe Aspose.ZIP correta, exemplos de extração completa e seletiva, comportamento de senha e criptografia, processamento por stream, restrições e referências de API.

Guias de Extração por Formato de Arquivo

Consulte páginas C# para arquivos e recursos frequentemente armazenados dentro de arquivos ZIP.

Recursos de extração de arquivos

FAQ sobre extração de arquivos

1. Como extraio arquivos compactados em C#?

Instale Aspose.ZIP, abra a entrada com a classe correspondente ao formato e extraia o contêiner inteiro ou entradas selecionadas para um diretório ou stream aprovado.

2. Como posso extrair arquivos de um ZIP?

Crie uma instância Archive para a entrada ZIP e chame ExtractToDirectory para descompactar tudo. Percorra Archive.Entries quando apenas itens específicos forem necessários.

3. Extrair um arquivo compactado é o mesmo que descompactar ZIP?

Descompactar ZIP se aplica especificamente a arquivos ZIP. Extração é um conceito mais amplo e também cobre formatos como 7Z, RAR, TAR, CAB, CPIO e WIM.

4. Aplicações .NET podem abrir arquivos protegidos por senha?

Aspose.ZIP oferece suporte a acesso por senha para formatos aplicáveis quando credenciais válidas e configurações de descriptografia compatíveis são fornecidas.

5. Como extrair com segurança arquivos enviados por usuários?

Use armazenamento temporário isolado, valide cada caminho de saída, restrinja formatos aceitos, aplique limites de tamanho, defina timeout de processamento e remova dados temporários.