2016-08-01 114 views
2

我想创建一个存储文件的zip存档工作,并设置ZipArchiveEntry.CompressionLevelCompressionLevel.NoCompression, 但是当我在释放模式运行我的Android APK,所有ZipArchiveEntries压缩并具有比> 0%。
我使用xamarin for android 4.1.1.3并测试了lenovo tab 4 A7-30GC和asus Z00VD中的apk。
示例代码:设置ZipArchiveEntry.CompressionLevel到CompressionLevel.NoCompression不xamarin的Android

public void AddToArchive(string EntryName, string Path, DateTime TimeStamp) 
    { 
     ZipArchiveEntry zipEntry = this.Archive.CreateEntry(EntryName, CompressionLevel.NoCompression); 
     zipEntry.LastWriteTime = TimeStamp; 
     using (Stream entryStream = zipEntry.Open()) 
     { 
      using (Stream fileStream = File.Open(Path, FileMode.Open, FileAccess.Read, FileShare.Read)) 
      { 
       fileStream.CopyTo(entryStream); 
       fileStream.Close(); 
      } 
      entryStream.Close(); 
     } 
    } 

谢谢。

回答

0

基于Microsoft .Net参考源(通过Mono源),设置CompressionLevel仅为下层压缩代码提供“提示”。

您将会看到,在“零”压缩级别进行压缩时,某些文件最终会看到由于文件优化而产生的某些压缩,这些压缩无论请求的压缩级别如何都可以完成。这是会发现跨Mono,Xamarin.Android,Xamarin.iOS,.Net等...

这是一个抽象的概念,而不是ZLib压缩级别。 可能有也可能没有与deflater的可能实现特定级别参数的任何对应关系。

///------------------------------------------------------------------------------ 
/// <copyright file="CompressionLevel.cs" company="Microsoft"> 
///  Copyright (c) Microsoft Corporation. All rights reserved. 
/// </copyright>        
/// 
/// <owner>gpaperin</owner> 
///------------------------------------------------------------------------------ 
// This is an abstract concept and NOT the ZLib compression level. 
// There may or may not be any correspondance with the a possible implementation-specific level-parameter of the deflater. 
public enum CompressionLevel { 
    Optimal = 0, 
    Fastest = 1, 
    NoCompression = 2 
}