c# - 如何使用 SharpZipLib 在 C# 中创建超过 7 GB 的 zip 文件?

标签 c# zip

<分区>

我想用 C# 创建一个包含近 8 GB 数据的 zip 文件。我正在使用以下代码:

using (var zipStream = new ZipOutputStream(System.IO.File.Create(outPath)))
{
    zipStream.SetLevel(9); // 0-9, 9 being the highest level of compression

    var buffer = new byte[1024*1024];

    foreach (var file in filenames)
    {
        var entry = new ZipEntry(Path.GetFileName(file)) { DateTime = DateTime.Now };

        zipStream.PutNextEntry(entry);

        var bufferSize = BufferedSize;
        using (var fs = new BufferedStream(System.IO.File.OpenRead(file), bufferSize))
        {
            int sourceBytes;
            do
            {
                 sourceBytes = fs.Read(buffer, 0, buffer.Length);
                 zipStream.Write(buffer, 0, sourceBytes);
             } while (sourceBytes > 0);
         }
     }

     zipStream.Finish();
     zipStream.Close();
 }

此代码适用于 1 GB 以下的小文件,但当数据达到 7-8 GB 时会抛出异常。

最佳答案

正如其他人指出的那样,实际的异常对回答这个问题会有很大帮助。但是,如果您想要一种更简单的方法来创建 zip 文件,我建议您尝试使用 http://dotnetzip.codeplex.com/ 提供的 DotNetZip 库。 .我知道它支持 Zip64(即大于 4.2gb 的条目和大于 65535 的条目)所以它可能能够解决您的问题。与自己处理文件流和字节数组相比,使用起来也容易得多。

using (ZipFile zip = new ZipFile()) {
    zip.CompressionLevel = CompressionLevel.BestCompression;
    zip.UseZip64WhenSaving = Zip64Option.Always;
    zip.BufferSize = 65536*8; // Set the buffersize to 512k for better efficiency with large files

    foreach (var file in filenames) {
        zip.AddFile(file);
    }
    zip.Save(outpath);
}

关于c# - 如何使用 SharpZipLib 在 C# 中创建超过 7 GB 的 zip 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11207760/

相关文章:

c# - TreeListEx,使用模板 _StandardValues 设置的字段未从 sitecore 检索?

c# - AutoCAD C#/.Net : expose entities coordinates

c# - Guid.NewGuid(); .NET Core 的幕后

java - 将随机访问文件透明写入 zip 文件

compression - 如何在 Squeak Smalltalk 中压缩目录?

java - 为什么数字字符不能用作目录名? ( java )

R 函数 zip(utils) 在我的机器上不起作用

zip - Zip格式的JPG+Zip文件组合问题

c# - AutoResetEvent 在信号前触发

c# - 将事件绑定(bind)到命令