Sdílet prostřednictvím


Přidání zipArchiveEntry s compressionLevel nastaví hlavičku centrálního adresáře ZIP pro obecné účely příznaky bitů

Specifikace souboru ZIP definuje, že bity 1 a 2 příznaku pro obecné účely v hlavičce centrálního adresáře záznamu vnořeného souboru by se měly použít k označení úrovně komprese vnořeného souboru.

Rozhraní .NET Framework nastaví tyto bity při generování souborů ZIP podporujících ZipPackage rozhraní API. Během migrace kódu rozhraní .NET Framework do .NET došlo ke ztrátě této funkce a v .NET byly bity 1 a 2 vždy nastaveny, 0 když byly v souboru ZIP vytvořeny nové záznamy souborů. Tato změna způsobující chybu obnoví tuto schopnost. Stávající klienti .NET, kteří zadávají CompressionOption při volání ZipArchive.CreateEntry , se však změní hodnoty příznaku bitu pro obecné účely.

Předchozí chování

Rozhraní .NET dříve zachovalo bity pro obecné účely pro každý ZipArchiveEntry z nich již v ZipArchive době, kdy byla načtena, a byly přidány nové položky. Volání ZipArchive.CreateEntry(String, CompressionLevel) však vždy vedlo k tomu, že bity 1 a 2 zůstaly na výchozí hodnotě 0, i když CompressionLevel byla použita jiná než CompressionLevel.Optimal použitá.

Toto chování mělo podřízený účinek: volání Package.CreatePart(Uri, String, CompressionOption) s jakýmkoli CompressionOption výsledkem, že bity 1 a 2 zůstaly bez sady (a proto CompressionOption se vždy zachovaly v souboru ZIP jako CompressionOption.Normal).

Nové chování

Počínaje rozhraním .NET 9 CompressionLevel se parametr mapuje na příznaky bitů pro obecné účely, jak je uvedeno v následující tabulce.

CompressionLevel Bit 1 Bit 2
NoCompression 0 0
Optimal 0 0
SmallestSize 1 0
Fastest 1 1

Pokud zavoláte ZipArchive.CreateEntry(String, CompressionLevel) a zadáte CompressionLevel.NoCompression, metoda komprese záznamu vnořeného souboru je nastavena na Stored (místo výchozí hodnoty Deflate.)

Bity pro obecné účely pro ZipArchiveEntry záznamy, které již existují v souboru ZipArchive , zůstanou zachovány, pokud je přidán nový ZipArchiveEntry .

Hodnoty CompressionOptionPackage.CreatePart(Uri, String, CompressionOption) výčtu jsou namapovány na CompressionLevel (a výsledkem jsou odpovídající bity, které jsou nastaveny), jak je znázorněno v následující tabulce.

CompressionOption CompressionLevel
NotCompressed NoCompression
Normal Optimal
Maximum SmallestSize (.NET Framework)
Optimal (.NET)
Fast Fastest
SuperFast Fastest

Zavedená verze

.NET 9 Preview 5

Typ zásadní změny

Tato změna je změna chování.

Důvod změny

Tato změna způsobující chybu byla zavedena pro obnovení stávajícího chování rozhraní .NET Framework, které bylo vynecháno z .NET v okamžiku přenosu. Tato změna také dává podřízeným klientům System.IO.Packagingkontrolu nad hodnotou těchto bitů.

Chcete-li zajistit, aby nové ZipArchiveEntry záznamy přidané do ZipArchive obecných bitových 0příznaků , zadejte CompressionLevel nebo CompressionLevel.OptimalCompressionLevel.NoCompression při volání ZipArchive.CreateEntry(String, CompressionLevel).

Pokud používáte Package.CreatePart(Uri, String, CompressionOption) k přidání částí do balíčku OPC, zadejte CompressionOption hodnotu CompressionOption.NotCompressed nebo CompressionOption.Normal.

Ovlivněná rozhraní API