C#:将文件存档为100MB的部分

时间:2009-10-17 21:25:58

标签: c# file archive 7zip

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

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

  1. 是否可以创建第一个100mb存档部件并在创建下一个100mb部件之前上传它?
  2. 如何从多个拆分档案中使用SevenZipSharp提取文件?
  3. 更新#2:我刚刚使用7-zip GUI并创建多卷/拆分档案,我发现选择第一个并从中提取将提取整个来自所有拆分档案的文件。这让我相信后续部分的路径包含在第一部分中(或者是连续的?)。但是,我不确定这是否可以直接在控制台上运行,但我现在会尝试,看看它是否解决了第一次更新中的问题#2。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

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

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

修改

只是要清楚 - 解压缩只是上面的相反顺序,所以一旦你的压缩代码工作,解压缩就会很容易。