根据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检查模式:
答案 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)中,并且很容易使用“存储”而不是“放气”添加文件。