【问题标题】:Why the size of compressed file is bigger than uncompressed in SharpZipLib?为什么压缩文件的大小比 SharpZipLib 中的未压缩文件大?
【发布时间】:2014-06-11 13:47:18
【问题描述】:

我有一个非常奇怪的问题。我使用 SharpZipLib 库来生成 .zip。我发现 .zip 的大小比我的文本文件的总和大一点。我不知道怎么了。我也尝试用谷歌搜索,但找不到与我的案例相关的任何内容。这是我的代码:

    protected void CompressFolder(string[] files, string outputPath)
    {
        using (ZipOutputStream s = new ZipOutputStream(File.Create(outputPath)))
        {
            s.SetLevel(0);
            foreach (string path in files)
            {
                ZipEntry entry = new ZipEntry(Path.GetFileName(path));
                entry.DateTime = DateTime.Now;
                entry.Size = new FileInfo(path).Length;
                s.PutNextEntry(entry);
                byte[] buffer = new byte[4096];
                int byteCount = 0;
                using (FileStream input = File.OpenRead(path))
                {
                    byteCount = input.Read(buffer, 0, buffer.Length);
                    while (byteCount > 0)
                    {
                        s.Write(buffer, 0, byteCount);
                        byteCount = input.Read(buffer, 0, buffer.Length);
                    }
                }
            }
        }
    }

【问题讨论】:

  • 您是在压缩文本还是二进制/图片/word文档等?通常,如果您的原始文件已压缩,则压缩可能会导致文件稍大
  • 如果你压缩一个压缩文件,结果会比以前大。您的文件是否已经压缩?先看再回答。
  • 我的文件是文本文件。我尝试手动压缩,zip 文件大小比我从 SharpZipLib 获得的 zip 文件小很多。
  • 您的文件系统是否已经在压缩这些文本文件? NTFS 透明地提供压缩。

标签: c# c#-4.0 sharpziplib


【解决方案1】:

压缩级别 0 表示 SharpZipLib 存储而不是压缩。

较大的大小是因为 Zip 元结构(文件名等)

然后您的解决方案是将级别更改为更高的级别,即:

s.SetLevel(9);

【讨论】: