Bagikan melalui


Menambahkan ZipArchiveEntry dengan CompressionLevel mengatur bendera bit tujuan umum header direktori pusat ZIP

Spesifikasi file ZIP mendefinisikan bahwa bit 1 & 2 dari bendera bit tujuan umum dalam header direktori pusat rekaman file berlapis harus digunakan untuk menunjukkan tingkat kompresi file berlapis.

.NET Framework mengatur bit ini saat menghasilkan file ZIP yang mendasar ZipPackage API. Selama migrasi kode .NET Framework ke .NET, fungsionalitas ini hilang dan di .NET, bit 1 & 2 selalu diatur ke 0 ketika rekaman file baru dibuat dalam file ZIP. Perubahan yang melanggar ini memulihkan kemampuan tersebut. Namun, klien .NET yang ada yang menentukan CompressionOption saat memanggil ZipArchive.CreateEntry akan melihat nilai bendera bit tujuan umum berubah.

Perilaku sebelumnya

Sebelumnya, .NET mempertahankan bit tujuan umum untuk setiap ZipArchiveEntry bit yang sudah ada saat dimuat ZipArchive dan entri baru ditambahkan. Namun, panggilan ZipArchive.CreateEntry(String, CompressionLevel) selalu mengakibatkan bit 1 & 2 dibiarkan pada nilai 0default , bahkan jika CompressionLevel selain CompressionLevel.Optimal digunakan.

Perilaku ini memiliki efek hilir: memanggil Package.CreatePart(Uri, String, CompressionOption) dengan apa pun CompressionOption yang mengakibatkan bit 1 & 2 dibiarkan tidak diatur (dan dengan demikian CompressionOption selalu dipertahankan ke file ZIP sebagai CompressionOption.Normal).

Perilaku yang baru

Mulai dari .NET 9, parameter dipetakan CompressionLevel ke bendera bit tujuan umum seperti yang ditunjukkan dalam tabel berikut.

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

Jika Anda memanggil ZipArchive.CreateEntry(String, CompressionLevel) dan menentukan CompressionLevel.NoCompression, metode kompresi rekaman file berlapis diatur ke Stored (bukan nilai Deflatedefault .)

Bit tujuan umum untuk ZipArchiveEntry rekaman yang sudah ada di ZipArchive masih dipertahankan jika baru ZipArchiveEntry ditambahkan.

Nilai CompressionOption enumerasi di dipetakan Package.CreatePart(Uri, String, CompressionOption) ke CompressionLevel (dan menghasilkan bit terkait yang diatur) seperti yang ditunjukkan dalam tabel berikut.

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

Versi yang diperkenalkan

Pratinjau .NET 9 5

Jenis perubahan yang melanggar

Perubahan ini adalah perubahan perilaku.

Alasan untuk berubah

Perubahan yang melanggar ini diperkenalkan untuk memulihkan perilaku .NET Framework yang ada, yang dihilangkan dari .NET pada titik porting. Perubahan ini juga memberikan klien hilir (seperti System.IO.Packaging) kontrol atas nilai bit ini.

Jika Anda ingin memastikan bahwa rekaman baru ZipArchiveEntry yang ditambahkan ke ZipArchive memiliki bendera bit tujuan umum , 0tentukan CompressionLevel dari CompressionLevel.Optimal atau CompressionLevel.NoCompression saat Anda memanggil ZipArchive.CreateEntry(String, CompressionLevel).

Jika Anda menggunakan Package.CreatePart(Uri, String, CompressionOption) untuk menambahkan bagian ke paket OPC, tentukan CompressionOption dari CompressionOption.NotCompressed atau CompressionOption.Normal.

API yang Terpengaruh