1

所以我使用DotNetZip 库已经有一段时间了,它工作得很好,直到昨天我最大化了 zipfile 的大小。在任何一天,我都需要压缩 PDF 并将它们传输到仅接受 zip 文件的 SFTP 站点。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
4

1 回答 1

1

尝试首先枚举所有文件,获取 FileInfo 列表,然后循环遍历它们,并每 5K(或无论您的批处理大小)创建 ZIP 文件。您不需要删除任何内容,只需在内存中保留一个批处理 id,这样您的 zip 文件名就会从中派生(即pdf_batch_01.zip)。

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

于 2013-12-17T15:44:41.557 回答