创建一个ZIP文件,没有条目触及磁盘?

时间:2012-12-10 17:43:34

标签: c# zip

我正在尝试创建一个程序,该程序能够根据用户输入创建包含文件的压缩包。

在压缩之前我不需要将任何这些文件写入硬盘驱动器,因为这是不必要的,所以如何创建这些文件而不实际将它们写入硬盘驱动器,然后有他们拉链了?

我正在使用DotNetZip。

3 个答案:

答案 0 :(得分:4)

请参阅文档here,特别是“使用从流中获取的内容创建zip”的示例:

 using (ZipFile zip = new ZipFile())
  {
    ZipEntry e= zip.AddEntry("Content-From-Stream.bin", "basedirectory", StreamToRead);
    e.Comment = "The content for entry in the zip file was obtained from a stream";
    zip.AddFile("Readme.txt");
    zip.Save(zipFileToCreate);
  }

如果您的文件尚未采用流式格式,则需要将其转换为一种格式。您可能希望使用MemoryStream

答案 1 :(得分:0)

我使用SharpZipLib,但是如果DotNetZip可以针对基本的System.IO.Stream做任何事情,那么是的,只需要将它写入MemoryStream来写入。

答案 2 :(得分:0)

写入硬盘不应该是避免的,因为它是不必要的。那是倒退。如果不要求整个压缩过程在内存中完成,那么通过写入硬盘来避免它。

硬盘比内存更适合存储大量数据。如果您的zip文件有可能最终大约为1 GB,那么您的应用程序可能会出现问题,或者至少会导致系统速度变慢。如果你直接写入硬盘驱动器,那么zip的大小可能会达到几千兆字节而不会出现问题。