问候....

我使用HTE最新的dotnetzip在C#3.5中编写了一个备份程序。该程序的基础应在服务器上给出一个位置和跨度zip文件的最大大小并进行。从那里开始,它应该从给定的位置遍历所有文件夹/文件,并将它们添加到存档中,并保持确切的结构。它还应将所有内容压缩到合理的数量。给定的未压缩的文件夹/文件集合可以很容易地为10-25GB,创建的跨度文件限于每个约1GB。

我的一切都可以使用(使用dotnetzip)。我唯一的挑战是,实际上几乎没有发生侵犯。我选择使用“ AddDirectory”方法来简化代码,并且通常看起来对我的项目的适合程度。阅读后,我第二次猜测这个决定。

  1. 给定以下代码和存档中的大量文件,我应该在添加到zip时压缩每个文件吗?还是AddDirectory方法应该提供大约相同的压缩?

  2. 我尝试了ionic.zlib.compressionlevel提供的所有压缩级别,似乎没有帮助。我应该考虑使用外部压缩算法并将其流式传输到我的dotnetzip文件中吗?

using (ZipFile zip = new ZipFile())  
{  
  zip.AddDirectory(root.FullName);  

  if (zipPassword.Length > 0)  
    zip.Password = zipPassword;  

  float size = zipGbSize * 1024 * 1024 * 1024;  

  zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;  
  zip.AddProgress += new EventHandler<AddProgressEventArgs>(Zip_AddProgress);  
  zip.ZipError += new EventHandler<ZipErrorEventArgs>(Zip_ZipError);  
  zip.Comment = "This zip was created at " + System.DateTime.Now.ToString("G");  
  zip.MaxOutputSegmentSize = (int)size;   //in gig  
  zip.Name = archiveDir.FullName + @"\Task_" + taskId.ToString() + ".zip";  
  zip.Save();  
}  

感谢您的任何帮助!

有帮助吗?

解决方案

1.启动以下代码和存档中的大量文件,我是否应该在将其添加到zip中时压缩每个文件?

dotnetzip的工作方式是将其添加到存档时压缩每个文件。您的应用不需要进行压缩。 Dotnetzip为您做这件事。

还是AddDirectory方法应该提供大约相同的压缩?

通过AddDirectory()方法添加到ZIP文件中的条目在编写ZIP档案时通过相同的代码路径,如通过AddFile()添加的条目。文件数据被压缩,然后选择加密,然后写入zip文件。


一个未经请求的提示:您不需要做:

zip.AddProgress += new EventHandler<AddProgressEventArgs>(Zip_AddProgress);   

您可以做:

zip.AddProgress += Zip_AddProgress;   

您如何确定不会发生压缩?

如果您对每个条目的压缩感到好奇,则可以注册SaveProgress事件处理程序。 SaveProgress事件在撰写档案期间的不同时间(包括在节省开始时,dotnetzip)开始为一个条目编写数据时,在编写一个条目期间的各个间隔,在完成每个条目的编写数据后,以及完成所有数据完成后。这些阶段,并在 ZipprogressEventType枚举. 。当EventType保存_AFTERWRITEENTRY时,您可以计算该特定条目的压缩率。

为了验证不发生压缩,我建议您注册这样的SaveProgress事件并查看该压缩比。

另外,如上所述,某些文件类型不能被压缩。 JPG,MPG,MP3,ZIP文件等不太可压缩。


最后,如果您只使用dotnetzip命令行工具,则进行备份可能会更容易。如果您要做的就是备份特定目录,则可以使用命令行工具(zipit.exe)并避免编写程序。使用zipit.exe工具,如果您使用-v选项,则该工具会打印进度报告,并将通过我上面描述的机制显示每个条目的压缩。即使您喜欢编写自己的程序,也可以考虑使用zipit.exe来验证使用dotnetzip时发生的压缩是或不发生这种压缩。

其他提示

我不确定是否低估了您的问题,但是任何zip文件的最大尺寸 它的4GB. 。也许您必须创建一个新的 ZipFile 每次达到该限制时。

抱歉,如果那没有帮助。

您正在压缩哪种数据?某些类型的数据不能很好地压缩,例如JPEG或已被压缩的ZIP文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top