【问题标题】:Grab X Amount Of Files and Zip Using DotNetZip Library使用 DotNetZip 库抓取 X 数量的文件和 Zip
【发布时间】:2013-12-17 23:44:41
【问题描述】:

所以我已经使用DotNetZip Library 有一段时间了,它工作得很好,直到昨天我最大化了 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

【问题讨论】:

  • 也许离题了,但是为什么需要压缩 PDF 文件呢?无论如何它们都被压缩了,因此您不会节省太多空间。
  • 显然我要上传到的这个 SFTP 站点只接受 zip 文件。另一端有一个自动化流程可以提取这些 PDF。
  • 好的,有道理,检查我的答案。

标签: vb.net counter dotnetzip


【解决方案1】:

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

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

【讨论】:

  • 谢谢...我需要对此进行一些研究,以及如何编写代码。
猜你喜欢
  • 2011-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
  • 1970-01-01
  • 2011-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多