在C#中创建未压缩的Zip#

时间:2018-02-05 11:59:46

标签: c# .net zip

根据System.IO.Compression中的ZipArchive库,我有一个问题。 我想创建一个未压缩的.zip文件。到目前为止我的代码看起来像这样:

//Creates a "Deflate"-Mode file in the created zip.
using (FileStream fs = new FileStream(zippath, FileMode.OpenOrCreate))
using (ZipArchive zip = new ZipArchive(fs, ZipArchiveMode.Update))
{
    var demoFile = zip.CreateEntry("foo0.txt", CompressionLevel.NoCompression);  //NoCompression does not seem to have an impact
    using (var streamWriter = new StreamWriter(demoFile.Open()))
    {
        streamWriter.Write("Bar!");
    }
}

这就是创建一个zip文件,其中的文件写在" DEFLATE"模式不在商店。我怎样才能解决这个问题。我的想法是,我的问题将通过使用CompressionLevel.NoCompression来解决。

同样将文件写入文件系统并压缩目录不是一个选项,因为我想创建一个可能包含数十万个小文件的zip文件。此外,只使用GZipStream不是一个选项,因为我想在.zip文件中创建一个目录结构。

我用7-zip检查模式:

(screenshot from 7-zip)

2 个答案:

答案 0 :(得分:2)

如果出于某种原因,您需要将内容添加到ZIP文件,并将其压缩方法显式设置为 STORE (无压缩),则需要使用某些第三方库。

System.IO.Compression中的.NET类默认使用 DEFLATE 。没有明显的方法可以改变它并使用另一种压缩方法或算法 提供CompressionLevel.NoCompression只是告诉 DEFLATE 算法使用最低压缩率 1 。就文件大小而言,无论如何,这可能会给你大致相同的最终结果。

支持 STORE 方法的第三方库包括:

1 应该是......没有压缩。请参阅DEFLATE的non-compressed blocks

答案 1 :(得分:1)

对于以后碰巧看到此主题的任何人,我强烈推荐Jaime Olivares编写的ZipStorer类:

https://github.com/jaime-olivares/zipstorer

很容易将此代码添加到C#项目(而不是DLL)中,并且很容易使用“存储”而不是“放气”添加文件。