所以我一直在使用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
答案 0 :(得分:1)
首先尝试枚举所有文件,获取FileInfo列表,然后循环浏览它们,并每隔5K(或批量大小)创建ZIP文件。您不需要删除任何内容,只需在内存中保留批处理ID,因此您的zip文件名称将来自(即pdf_batch_01.zip
)。
因此,当达到批量大小时,您将执行Save
并创建新的ZipFile
,并继续在循环中添加文件。不要忘记在最后一个文件中“提交”(最后一批很可能是不完整的)。总而言之,您在达到批量大小时“提交”或处理最后一个条目(变体为i=FileCount-1
)。