Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Спецификация 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.