关于zip分卷压缩

我们用有些压缩软件对大文件进行分卷压缩后,生成的文件名是诸如xxx.zip.001, xxx.zip.002…这样的。有人会问在.Net程序中如何实现zip文件的分卷压缩。.Net4.5最新提供的System.IO.Compression命名空间下zip文件相关操作中,并没有分卷压缩的功能。

其实这些zip的分卷压缩只是把zip文件按指定大小分割后,文件名按顺序添加.001, .002…。

所以,如果把分卷压缩后的所有文件合并后,就是一个完整的zip文件。

可以用如下copy命令合并文件:

copy /b xxx.zip.001 + xxx.zip.002 xxx.zip

知道了原理,要在程序中实现分卷压缩就简单了,只需要在zip压缩完毕之后,按指定大小分割文件即可。

下面的C#代码片段演示zip分卷功能:

//zipFilePath就是压缩完毕之后的zip文件路径
//splitInByte就是分卷的大小,单位是byte。也就是如果按10MB分卷,splitInByte = 10 * 1024 *1024
if (splitInByte > 0 && new FileInfo(zipFilePath).Length > splitInByte)
{
    var splitNumber = 0;
    using(FileStream sourceStream = File.OpenRead(zipFilePath))
    {
        byte[] buffer = new byte[4096];
        int readSize;
        do
        {
                splitNumber++;
                using(FileStream splitStream = File.Create(string.Format("{0}.{1}", zipFilePath, splitNumber.ToString().PadLeft(3, '0'))))
                {
                        do
                        {
                                readSize = sourceStream.Read(buffer, 0, buffer.Length);
                                splitStream.Write(buffer, 0, readSize);
                        }
                        while (splitStream.Length + buffer.Length <= splitInByte && readSize > 0);
                }
        }
        while (readSize > 0);
    }

    File.Delete(zipFilePath);
}

 

原创文章,转载请注明: 转载自闲云博客

本文链接地址: 关于zip分卷压缩

发表评论

电子邮件地址不会被公开。 必填项已用*标注