Extrair conteúdo C# de ZIP no .NET

Utilize Aspose.ZIP for .NET para abrir um arquivo ZIP, inspecionar suas entradas e restaurar somente arquivos C# necessários à aplicação C#. Nesta página, extração significa localizar itens com extensão .cs dentro do contêiner ZIP e gravá-los em um destino controlado. Aspose.ZIP restaura o arquivo armazenado no arquivo compactado; ele não interpreta nem converte o conteúdo interno.

A extração seletiva é útil para ingestão de documentos, processamento de uploads, pacotes de relatórios e fluxos de gerenciamento de conteúdo. A aplicação pode ignorar entradas irrelevantes, verificar nomes e tamanhos e encaminhar os arquivos aprovados para a próxima etapa sem descompactar todo o pacote.

Como extrair arquivos C# de ZIP com C#

Instale o pacote Aspose.ZIP for .NET e importe o namespace Aspose.Zip. Os metadados do arquivo ficam disponíveis antes da gravação, permitindo verificar ArchiveEntry.Name, ArchiveEntry.IsDirectory e ArchiveEntry.UncompressedSize antes de salvar arquivos de documento.


Package Manager Console Command

PM> Install-Package Aspose.Zip

Após a instalação, abra o ZIP com Archive, percorra Archive.Entries, selecione entradas que não sejam diretórios e tenham extensão .cs, e chame ArchiveEntry.Extract para cada destino aprovado. O exemplo usa apenas o nome final do arquivo, portanto caminhos armazenados no arquivo compactado não podem escrever fora da pasta de destino.

Etapas para extrair arquivos C# em C#

  • Defina o caminho do ZIP de origem e crie um diretório de saída isolado.
  • Abra o pacote com a classe Archive.
  • Percorra Archive.Entries em vez de extrair o pacote inteiro imediatamente.
  • Ignore diretórios e selecione nomes de arquivo com a extensão .cs.
  • Crie um caminho de destino que permaneça dentro da raiz de saída aprovada.
  • Rejeite entradas que excedam o limite configurado de tamanho extraído.
  • Salve cada entrada aprovada com ArchiveEntry.Extract.

Requisitos do sistema

  • A supported .NET runtime on Windows, Linux, or macOS.
  • Visual Studio, JetBrains Rider, Visual Studio Code, or another C# development environment.
  • Aspose.ZIP for .NET installed through NuGet or referenced as an assembly.
  • Read access to the source ZIP and write access to the destination directory.
  • Clear size, execution-time, and temporary-storage limits for untrusted archives.

Exemplo em C#: extrair arquivos C# selecionados de ZIP

O código abre um pacote ZIP, ignora diretórios, filtra entradas pela extensão permitida e grava os arquivos correspondentes em um único diretório de saída. Descartar os caminhos armazenados evita que segmentos de diretório superior controlem o destino. Em produção, defina também uma regra determinística para nomes duplicados.

Extrair arquivos C# de ZIP - C#

using Aspose.Zip;
using System;
using System.IO;

string archivePath = Path.GetFullPath("package.zip");
string outputDirectory = Path.GetFullPath("extracted-c#");
string[] allowedExtensions = { ".cs" };
const ulong MaxEntrySize = 100UL * 1024 * 1024;

Directory.CreateDirectory(outputDirectory);

using (var archive = new Archive(archivePath))
{
    foreach (ArchiveEntry entry in archive.Entries)
    {
        if (entry.IsDirectory) continue;

        string fileName = Path.GetFileName(entry.Name);
        if (string.IsNullOrWhiteSpace(fileName)) continue;

        string extension = Path.GetExtension(fileName);
        if (!Array.Exists(
            allowedExtensions,
            value => string.Equals(value, extension, StringComparison.OrdinalIgnoreCase)))
        {
            continue;
        }

        if (entry.UncompressedSize > MaxEntrySize)
        {
            throw new InvalidDataException(
                $"Entry '{fileName}' exceeds the 100 MB extraction limit.");
        }

        string destinationPath = Path.Combine(outputDirectory, fileName);
        entry.Extract(destinationPath);
    }
}

Notas de implementação para arquivos C#

Filtrar por extensão apenas identifica candidatos; isso não prova que o conteúdo seja válido ou seguro. Se o arquivo será exibido, indexado ou convertido, valide estrutura, codificação, conformidade e conteúdo com um componente de documentos.

The example intentionally flattens archived paths. If two approved entries have the same final file name, ArchiveEntry.Extract can overwrite an existing file. Define a policy before extraction: reject duplicates, generate unique names, or preserve a validated relative folder structure.

Segurança e privacidade

Trate o ZIP enviado, os nomes de entrada e o conteúdo como dados não confiáveis. Não combine ArchiveEntry.Name diretamente com o diretório de saída, pois uma entrada pode conter caminho absoluto ou segmentos que sobem para diretórios superiores. O exemplo usa Path.GetFileName; se precisar preservar pastas, resolva o caminho final e confirme que ele permanece dentro da raiz aprovada.

Limite tamanho compactado, tamanho extraído por entrada e total, número de entradas, tempo de processamento e jobs paralelos. Use armazenamento temporário com permissões restritas, remova resultados parciais após falhas e evite registrar senhas, nomes privados ou conteúdo extraído.

FAQ sobre extração de arquivos C#

Como extraio somente arquivos C# de um arquivo ZIP em C#?

Abra o ZIP com Archive, percorra Archive.Entries, filtre entradas que não sejam diretórios pela extensão .cs e chame Extract para cada caminho de saída validado.

Aspose.ZIP valida o conteúdo interno do arquivo C# extraído?

Não. Aspose.ZIP restaura o arquivo armazenado no ZIP. Ler, validar ou converter o conteúdo é responsabilidade de um componente que ofereça suporte ao formato.

O mesmo padrão de seleção pode ser usado com contêineres 7Z, RAR ou TAR?

O conceito é o mesmo, mas cada contêiner deve ser aberto com a classe de arquivo Aspose.ZIP correspondente. Tipos de entrada e operações de extração podem variar por formato.

Como lidar com nomes duplicados de arquivos C#?

Defina a regra antes da extração: rejeitar duplicados, gerar nomes únicos ou preservar uma estrutura relativa de pastas já validada.