使用DotNetZip库获取X量的文件和Zip

时间:2013-02-05 14:54:55

标签: vb.net counter dotnetzip

所以我一直在使用DotNetZip Library已经有一段时间了,而且它工作得非常好,直到昨天我最大化了zipfile大小。在任何一天,我需要压缩PDF并将其传输到SFTP站点,该站点只接受zip文件。 PDF的数量从几百,几千到超过10K不等。昨天,当DotNetZip进程破裂时,我有大约24K的PDF文件。有一种方法可以使用DotNetZip库拆分zip文件,但由于某种原因,SFTP服务器上使用的系统无法处理拆分的zip文件。

获取5K(或任何其他设定数量的文件),压缩,删除这些文件并抓取另一个5K,压缩,删除并重复此过程直到所有文件都被压缩的最佳方法是什么?

这是我目前的拉链过程代码......

        Dim PathToPDFs As String = "C:\Temp" 'PDF LOCATION
        Using Zip As ZipFile = New ZipFile()
            Zip.AddSelectedFiles("(name = *.pdf)", PathToPDFs, "", True)
            Zip.CompressionMethod = CompressionMethod.Deflate
            Zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression
            Zip.Save("C:\Temp\Zipfile.zip")
        End Using

1 个答案:

答案 0 :(得分:1)

首先尝试枚举所有文件,获取FileInfo列表,然后循环浏览它们,并每隔5K(或批量大小)创建ZIP文件。您不需要删除任何内容,只需在内存中保留批处理ID,因此您的zip文件名称将来自(即pdf_batch_01.zip)。

因此,当达到批量大小时,您将执行Save并创建新的ZipFile,并继续在循环中添加文件。不要忘记在最后一个文件中“提交”(最后一批很可能是不完整的)。总而言之,您在达到批量大小时“提交”或处理最后一个条目(变体为i=FileCount-1)。