1

在我的应用程序中,用户在其驱动器上选择了一个大文件 (>100 mb)。我希望该程序能够获取所选文件并将其分割成 100 mb 或更少的存档部分。如何才能做到这一点?我应该使用什么和文件格式?你能给我一些示例代码吗?在创建第一个 100mb 存档部分后,我将其上传到服务器,然后我将上传下一个 100mb 部分,依此类推,直到上传完成。之后,从另一台计算机上,我将下载所有这些存档的部分,然后我希望将它们连接到原始文件中。例如,7zip 库可以做到这一点吗?谢谢!

更新:从第一个答案开始,我想我将使用 SevenZipSharp,我相信我现在了解如何将文件拆分为 100mb 的存档部分,但我仍然有两个问题:

  1. 是否可以创建第一个 100mb 存档部分并在创建下一个 100mb 部分之前上传它?
  2. 如何使用 SevenZipSharp 从多个拆分的档案中提取文件?

更新#2:我只是在玩 7-zip GUI 并创建多卷/拆分档案,我发现选择第一个并从中提取将从所有拆分档案中提取整个文件。这使我相信通往后续部分的路径包含在第一个部分中(或者它是连续的?)。但是,我不确定这是否可以直接从控制台工作,但我现在会尝试,看看它是否解决了第一次更新中的问题 #2。

4

2 回答 2

3

看看SevenZipSharp,你可以用它来创建你的 spit 7z 文件,做任何你想上传的事情,然后在服务器端提取它们。

要拆分存档,请查看SevenZipCompressor.CustomParameters成员,传入“v100m”。(您可以在 7zip 的 7-zip.chm 文件中找到更多参数)

于 2009-10-17T21:39:50.400 回答
0

您可以先将数据拆分为 100MB 的“数据包”,然后将每个数据包依次传递到压缩器中,假装它们只是单独的文件。

但是,这种压缩通常是基于流的。只要您使用的库将通过 Stream 派生类执行其 I/O,实现您自己的 Stream 以您喜欢的任何方式即时“打包”数据将非常简单 - 因为数据被传递到您的 Write() 方法将其写入文件。当该文件超过 100MB 时,您只需关闭该文件并打开一个新文件,然后继续写入。

这些方法中的任何一种都可以让您轻松上传一个“数据包”,同时继续压缩下一个。

编辑

需要明确一点 - 解压只是上面的相反顺序,所以一旦你得到了压缩代码,解压就很容易了。

于 2009-10-17T22:00:16.337 回答