关于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); }