Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A especificação de arquivo ZIP define que os bits 1 e 2 do sinalizador de bits de uso geral no cabeçalho do diretório central de um registro de arquivo aninhado devem ser usados para indicar o nível de compactação do arquivo aninhado.
O .NET Framework define esses bits ao gerar os arquivos ZIP que sustentam a API ZipPackage. Durante a migração do código do .NET Framework para .NET, essa funcionalidade foi perdida e, no .NET, os bits 1 e 2 sempre foram definidos como 0 quando novos registros de arquivo foram criados no arquivo ZIP. Essa alteração interruptiva restaura essa funcionalidade. No entanto, os clientes .NET existentes que especificam um CompressionOption ao chamar ZipArchive.CreateEntry verão os valores do sinalizador de bits de uso geral mudarem.
Comportamento anterior
Anteriormente, o .NET preservava os bits de uso geral para cada ZipArchiveEntry já em um ZipArchive quando era carregado e novas entradas eram adicionadas. No entanto, a chamada ZipArchive.CreateEntry(String, CompressionLevel) sempre resultou em bits 1 e 2 sendo deixados com um valor padrão de 0, mesmo que outro CompressionLevel que não CompressionLevel.Optimal tenha sido usado.
Esse comportamento teve um efeito downstream: chamar Package.CreatePart(Uri, String, CompressionOption) com qualquer CompressionOption resultou na falta de definição dos bits 1 e 2 (e, portanto, sempre CompressionOption persistiu no arquivo ZIP como CompressionOption.Normal).
Novo comportamento
A partir do .NET 9, o parâmetro CompressionLevel é mapeado para os sinalizadores de bits de uso geral, conforme indicado na tabela a seguir.
CompressionLevel |
Bit 1 | Bit 2 |
|---|---|---|
NoCompression |
0 | 0 |
Optimal |
0 | 0 |
SmallestSize |
1 | 0 |
Fastest |
1 | 1 |
Se você chamar ZipArchive.CreateEntry(String, CompressionLevel) e especificar CompressionLevel.NoCompression, o método de compactação do registro de arquivo aninhado será definido como Stored (em vez do valor padrão de Deflate.)
Os bits de uso geral para registros ZipArchiveEntry que já existem em um ZipArchive ainda serão preservados se um novo ZipArchiveEntry for adicionado.
Os valores de enumeração CompressionOption em Package.CreatePart(Uri, String, CompressionOption) são mapeados para CompressionLevel (e resultam na definição dos bits correspondentes), conforme mostrado na tabela a seguir.
CompressionOption |
CompressionLevel |
|---|---|
NotCompressed |
NoCompression |
Normal |
Optimal |
Maximum |
SmallestSize (.NET Framework)Optimal (.NET) |
Fast |
Fastest |
SuperFast |
Fastest |
Versão introduzida
.NET 9 versão prévia 5
Tipo de alteração interruptiva
Esta é uma alteração comportamental.
Motivo da alteração
Essa alteração significativa foi introduzida para restaurar o comportamento existente do .NET Framework, que foi omitido do .NET no momento da portabilidade. Essa alteração também fornece controle downstream de clientes (como System.IO.Packaging) sobre o valor desses bits.
Ação recomendada
Se você quiser garantir que novos registros ZipArchiveEntry adicionados aoZipArchive tenham sinalizadores de bits de uso geral 0 adicionados, especifique um CompressionLevel de CompressionLevel.Optimal ou CompressionLevel.NoCompression quando você chamar ZipArchive.CreateEntry(String, CompressionLevel).
Se você usar Package.CreatePart(Uri, String, CompressionOption) para adicionar partes a um pacote OPC, especifique um CompressionOption de CompressionOption.NotCompressed ou CompressionOption.Normal.