Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Спецификация ZIP-файла определяет, что биты 1 и 2 флага общего назначения в заголовке центрального каталога вложенной записи файла должны использоваться для указания уровня сжатия вложенного файла.
платформа .NET Framework задает эти биты при создании ZIP-файлов, лежащих в основе ZipPackage API. Во время миграции кода платформа .NET Framework в .NET эта функция была потеряна и в .NET биты 1 и 2 всегда были заданы 0 при создании новых записей файлов в ZIP-файле. Это критическое изменение восстанавливает эту возможность. Однако существующие клиенты .NET, которые указывают CompressionOption , когда вызов ZipArchive.CreateEntry увидит изменения значений флага общего назначения.
Прежнее поведение
Ранее .NET сохранила биты общего назначения для каждого ZipArchiveEntry уже в ZipArchive момент загрузки и добавления новых записей. Однако вызов ZipArchive.CreateEntry(String, CompressionLevel) всегда приводил к тому, что биты 1 и 2 остаются в значении 0по умолчанию, даже если используется другое CompressionLevelCompressionLevel.Optimal.
Это поведение имело подчиненный эффект: вызов Package.CreatePart(Uri, String, CompressionOption) с любым CompressionOption результатом в битах 1 и 2 осталось неустановленным (и поэтому CompressionOption всегда сохранялся в ZIP-файле как CompressionOption.Normal).
Новое поведение
Начиная с .NET 9 CompressionLevel параметр сопоставляется с флагами битов общего назначения, как указано в следующей таблице.
CompressionLevel |
Бит 1 | Бит 2 |
|---|---|---|
NoCompression |
0 | 0 |
Optimal |
0 | 0 |
SmallestSize |
1 | 0 |
Fastest |
1 | 1 |
При вызове ZipArchive.CreateEntry(String, CompressionLevel) и указании CompressionLevel.NoCompressionметода сжатия вложенной записи файла задано значение Stored (а не значение Deflateпо умолчанию .)
Биты общего назначения для ZipArchiveEntry записей, которые уже существуют в объекте ZipArchive , по-прежнему сохраняются при добавлении нового ZipArchiveEntry .
Значения CompressionOptionPackage.CreatePart(Uri, String, CompressionOption) перечисления сопоставляются CompressionLevel с (и приводят к набору соответствующих битов), как показано в следующей таблице.
CompressionOption |
CompressionLevel |
|---|---|
NotCompressed |
NoCompression |
Normal |
Optimal |
Maximum |
SmallestSize(платформа .NET Framework)Optimal (.NET) |
Fast |
Fastest |
SuperFast |
Fastest |
Представленные версии
.NET 9( предварительная версия 5)
Тип критического изменения
Причина изменения
Это критическое изменение было введено для восстановления существующего поведения платформа .NET Framework, которое было пропущено из .NET в точке переноса. Это изменение также дает подчиненным клиентам (например System.IO.Packaging) контроль над значением этих битов.
Рекомендуемое действие
Если вы хотите убедиться, что новые ZipArchiveEntry записи добавлены в ZipArchive битовые флаги 0общего назначения, укажите или CompressionLevelCompressionLevel.OptimalCompressionLevel.NoCompression при вызове.ZipArchive.CreateEntry(String, CompressionLevel)
Если вы используете для Package.CreatePart(Uri, String, CompressionOption) добавления частей в пакет OPC, укажите или CompressionOptionCompressionOption.NotCompressedCompressionOption.Normal.