0

在我的文件管理器中,我需要提供下载文件的功能。我需要能够同时选择单个文件和目录。这可能是一个例子:

/www/index.html
/www/images/
/www/styles.css

如果我选择这 3 个项目(2 个文件和 1 个文件夹),我需要将它们全部添加到 ZIP 存档中。我已经有一个工作示例,我在其中使用了DownloadFolder()DownloadFile()。但是,它是这样的:

  1. 将每个文件下载到磁盘
  2. 如果有任何文件夹,递归查看它们并将这些文件下载到各自的文件夹(自动完成)
  3. 调用System.IO.Compression.ZipFile.CreateFromDirectory()将下载的文件压缩到 ZIP 存档
  4. 删除之前下载的文件
  5. 使用流式传输 ZIP 文件,new FileStream(zipFile, FileMode.Open, FileAccess.Read, FileShare.None, 4096, FileOptions.DeleteOnClose)以便之后删除 ZIP 文件

这很糟糕,因为我需要首先下载文件,将它们添加到存档中,删除我刚刚下载的文件,将存档流式传输给用户,然后最后删除存档进行清理。什么会更好:

  1. 告诉 FluentFTP 要流式传输哪些文件
  2. 在磁盘上创建 ZIP 存档
  3. 以递归方式将每个文件和目录添加到存档中
  4. 流式传输存档并随后删除文件

通过这样做,我应该能够制作非常非常大的文件(如果是这种情况,则为 100+ GB),而我所需要关心的只是临时存储,直到存档被删除。

我找不到有关如何执行此操作的任何信息,所以有些事情告诉我,我需要使用标志调用GetListing()方法FtpListOption.Recursive,然后“手动”创建每个目录,最后调用Download()方法,它返回一个流。

不过,有没有更好的方法?

4

0 回答 0