Extrair conteúdo DGN de ZIP no .NET

Utilize Aspose.ZIP for .NET para abrir um arquivo ZIP, inspecionar suas entradas e restaurar somente arquivos DGN necessários à aplicação C#. Nesta página, extração significa localizar itens com extensão .dgn 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 desenhos técnicos, pacotes de projeto, arquivos de engenharia e revisão automatizada de documentos. 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 DGN 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 CAD.


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 .dgn, 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 DGN 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 .dgn.
  • 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 DGN 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 DGN de ZIP - C#

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

string archivePath = Path.GetFullPath("package.zip");
string outputDirectory = Path.GetFullPath("extracted-dgn");
string[] allowedExtensions = { ".dgn" };
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 DGN

Filtrar por extensão apenas identifica candidatos; isso não prova que o conteúdo seja válido ou seguro. Versão do desenho, camadas, referências externas e geometrias devem ser verificadas com um componente CAD antes do uso posterior.

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 DGN

Como extraio somente arquivos DGN 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 .dgn e chame Extract para cada caminho de saída validado.

Aspose.ZIP valida o conteúdo interno do arquivo DGN 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 DGN?

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