Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De specificatie van het ZIP-bestand definieert dat bits 1 & 2 van de vlag voor algemeen gebruik in de centrale mapheader van een geneste bestandsrecord moeten worden gebruikt om het compressieniveau van het geneste bestand aan te geven.
.NET Framework stelt deze bits in bij het genereren van de ZIP-bestanden die onder de ZipPackage API liggen. Tijdens de migratie van .NET Framework-code naar .NET is deze functionaliteit verloren gegaan en in .NET zijn bits 1 &2 altijd ingesteld op 0 het moment dat er nieuwe bestandsrecords in het ZIP-bestand zijn gemaakt. Met deze wijziging die fouten veroorzaken, wordt die mogelijkheid hersteld. Bestaande .NET-clients die een CompressionOption aanroepen ZipArchive.CreateEntry opgeven, zien echter dat de vlagwaarden voor algemeen gebruik worden gewijzigd.
Vorig gedrag
Voorheen bleef .NET de bits voor algemeen gebruik behouden voor elke ZipArchiveEntry al in een ZipArchive toen deze werd geladen en werden nieuwe vermeldingen toegevoegd. Aanroepen ZipArchive.CreateEntry(String, CompressionLevel) hebben echter altijd geresulteerd in bits 1 & 2 die achterblijven op een standaardwaarde van 0, zelfs als een CompressionLevel andere waarde dan CompressionLevel.Optimal is gebruikt.
Dit gedrag had een downstream-effect: het aanroepen Package.CreatePart(Uri, String, CompressionOption) met een CompressionOption resultaat dat bits 1 & 2 ongeset werd gelaten (en dus het CompressionOption was altijd behouden in het ZIP-bestand als CompressionOption.Normal).
Nieuw gedrag
Vanaf .NET 9 wordt de CompressionLevel parameter toegewezen aan de bitvlagmen voor algemeen gebruik, zoals aangegeven in de volgende tabel.
CompressionLevel |
Bit 1 | Bit 2 |
|---|---|---|
NoCompression |
0 | 0 |
Optimal |
0 | 0 |
SmallestSize |
1 | 0 |
Fastest |
1 | 1 |
Als u aanroept ZipArchive.CreateEntry(String, CompressionLevel) en opgeeft CompressionLevel.NoCompression, wordt de compressiemethode van de geneste bestandsrecord ingesteld op Stored (in plaats van de standaardwaarde van Deflate.)
De bits voor algemeen gebruik voor ZipArchiveEntry records die al in een ZipArchive bestaan, blijven behouden als er een nieuwe ZipArchiveEntry wordt toegevoegd.
De CompressionOption opsommingswaarden Package.CreatePart(Uri, String, CompressionOption) worden toegewezen aan CompressionLevel (en resulteren in de bijbehorende bits die worden ingesteld) zoals wordt weergegeven in de volgende tabel.
CompressionOption |
CompressionLevel |
|---|---|
NotCompressed |
NoCompression |
Normal |
Optimal |
Maximum |
SmallestSize (.NET Framework)Optimal (.NET) |
Fast |
Fastest |
SuperFast |
Fastest |
Versie geïntroduceerd
.NET 9 Preview 5
Type wijziging die fouten veroorzaken
Deze wijziging is een gedragswijziging.
Reden voor wijziging
Deze belangrijke wijziging is geïntroduceerd om het bestaande .NET Framework-gedrag te herstellen, dat is weggelaten uit .NET op het punt van de overdracht. Deze wijziging geeft ook downstreamclients (zoals System.IO.Packaging) controle over de waarde van deze bits.
Aanbevolen actie
Als u ervoor wilt zorgen dat er nieuwe ZipArchiveEntry records worden toegevoegd aan de ZipArchive algemene bitsvlagmen, 0geeft u een CompressionLevel van CompressionLevel.Optimal of CompressionLevel.NoCompression wanneer u aanroept ZipArchive.CreateEntry(String, CompressionLevel).
Als u Package.CreatePart(Uri, String, CompressionOption) onderdelen toevoegt aan een OPC-pakket, geeft u een CompressionOption ofCompressionOption.NotCompressedCompressionOption.Normal.