2011-07-12 122 views
9

我需要使用.Net创建spanned(多卷)zip文件,但我一直无法找到一个库,使我能够做到这一点。。分割卷压缩文件的.Net库?

Spanned zip是一个压缩文件,压缩文件被分割成多个文件,这些文件通常具有诸如.z00,.z01等扩展名。

图书馆必须是开放源代码或免费的,因为我将把它用于开源项目。

(这是一个复制到this的问题,但目前还没有答案那里,我不会为ASP具体反正)

+0

多年以后,但我只想澄清这个问题是关于拆分档案。跨区的zip档案完全是其他东西 - 单个ZIP档案跨越多个逻辑卷(通常围绕软盘设计)。不同之处在于,分割ZIP归档使用“.z00 - .z(n - 1)”命名,而在跨区归档中,所有文件共享相同名称(具有相同的“.zip”扩展名)。 –

回答

13

DotNetZip允许你这样做。从他们的文档:

库支持ZIP密码,统一,ZIP64,流输入和输出, AES加密,多重压缩级别,自解压文件, 跨区档案,等等。

+0

+! DotNetZip很棒。 –

+1

dotNetZip的最大跨度文件数= 99.如果你想制作一个15MB的文件(发送到电子邮件),压缩的东西大于〜1.5GB,你是不走运的。 – docesam

+1

确实,DotNetZip对于拆分归档文件的最大文件(段)数为99,尽管这似乎完全是任意的。指定限制的最早版本(维基百科)是6.3.0(2006),与6.3.4(2014)在40亿文件限制(http://goo.gl/vh4Sp5 - 第8.5节)中匹配。 1)。但是,由于该库是开源的,您至少可以创建一个自定义修改。最小文件大小为64K(按照ZIP规范),您可以在一个ZIP文件夹中拥有大约256 TB的文件大小,而不会超过文件限制。 –

20

DotNetZip例如:

int segmentsCreated ; 
using (ZipFile zip = new ZipFile()) 
{ 
    zip.UseUnicode= true; // utf-8 
    zip.AddDirectory(@"MyDocuments\ProjectX"); 
    zip.Comment = "This zip was created at " + System.DateTime.Now.ToString("G") ; 
    zip.MaxOutputSegmentSize = 100*1024 ; // 100k segments 
    zip.Save("MyFiles.zip"); 

    segmentsCreated = zip.NumberOfSegmentsForMostRecentSave ; 
} 

如果segmentsCreated回来为5,那么你有以下的文件,每个文件不超过大小100KB的。

  • MyFiles.zip
  • MyFiles.z01
  • MyFiles.z02
  • MyFiles.z03
  • MyFiles.z04
+1

+1代码示例 – Jalal

+0

不错的代码,但不理解此行'zip.MaxOutputSegmentSize = 100 * 1024'这是什么意思100 kb?我猜你试图说1024Byte意味着1KB和1KB * 100意味着100 KB .....我是对吗? – Mou

+0

@Mou:那是对的。 –