ZipArchiveEntry hozzáadása CompressionLevel-készletekkel A ZIP központi könyvtárfejléc általános célú bitjelzői

A ZIP-fájl specifikációja azt határozza meg, hogy a beágyazott fájlrekord központi könyvtárfejlécében az általános célú bitjelölő 1 & 2 bitjét kell használni a beágyazott fájl tömörítési szintjének jelzésére.

.NET-keretrendszer beállítja ezeket a biteket a zip-fájlok létrehozásakor, amelyek a ZipPackage API. A .NET-keretrendszer kód .NET-be való migrálása során ez a funkció elveszett, és az .NET-ben az 1. és 2. bit mindig az új fájlrekordok ZIP-fájlban való létrehozásakor lett beállítva0. Ez a kompatibilitástörő változás visszaállítja ezt a képességet. A híváskor CompressionOption megadott ZipArchive.CreateEntry meglévő .NET-ügyfelek azonban látni fogják az általános célú bitjelölő értékeinek változását.

Előző viselkedés

Korábban a .NET megőrizte az általános célú biteket minden ZipArchiveEntry olyan ZipArchive esetben, amikor betöltődött, és új bejegyzéseket adott hozzá. A hívás ZipArchive.CreateEntry(String, CompressionLevel) azonban mindig azt eredményezte, hogy az 1> 2 bit az alapértelmezett értéken 0maradt, még akkor is, ha nem CompressionLevelCompressionLevel.Optimal használták.

Ennek a viselkedésnek alsóbb rétegbeli hatása volt: Package.CreatePart(Uri, String, CompressionOption) az CompressionOption 1& 2. bit meghívása nem történt meg (így a CompressionOption rendszer mindig a ZIP-fájlban CompressionOption.Normalmaradt).

Új viselkedés

A .NET 9-től kezdődően a paraméter az CompressionLevel általános célú bitjelölőkre van leképezve az alábbi táblázatban leírtak szerint.

CompressionLevel 1. bit 2. bit
NoCompression 0 0
Optimal 0 0
SmallestSize 0 0
Fastest 0 0

Ha meghívja ZipArchive.CreateEntry(String, CompressionLevel) és megadjaCompressionLevel.NoCompression, a beágyazott fájlrekord tömörítési Storedmódszere az alapértelmezett érték helyett a következőre Deflate van állítva: .)

A már létező ZipArchiveEntry rekordok általános célú bitjei ZipArchive továbbra is megmaradnak, ha új ZipArchiveEntry rekordot adnak hozzá.

Az CompressionOption enumerálási értékek Package.CreatePart(Uri, String, CompressionOption) a következő táblázatban látható módon vannak megfeleltetve CompressionLevel (és a megfelelő bitek beállítását eredményezik).

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

Bevezetett verzió

.NET 9 előzetes verzió 5

A kompatibilitástörő változás típusa

Ez a változás viselkedésbeli változás.

A változás oka

Ez a kompatibilitástörő változás a meglévő .NET-keretrendszer viselkedés visszaállítására lett bevezetve, amely a .NET-ből kimaradt a portoláskor. Ez a változás az alsóbb rétegbeli ügyfelek (például System.IO.Packaging) számára is lehetővé teszi ezeknek a biteknek az értékét.

Ha meg szeretné győződni arról, hogy az új ZipArchiveEntry rekordokhoz általános célú bitjelölők ZipArchivetartoznak, adjon meg egy 0CompressionLevelCompressionLevel.Optimal vagy több rekordot a híváskor.CompressionLevel.NoCompressionZipArchive.CreateEntry(String, CompressionLevel)

Ha Package.CreatePart(Uri, String, CompressionOption) egy OPC-csomaghoz szeretne alkatrészeket hozzáadni, adjon meg egy vagy több CompressionOption elemet CompressionOption.NotCompressedCompressionOption.Normal.

Érintett API-k