压缩问题与DotNetZip
问候大型归档文件的....压缩问题与DotNetZip
我在C#3.5编写的备份程序,使用兴田最新DotNetZip。该程序的基础知识将被赋予一个服务器上的位置和一个跨越的zip文件的最大大小,然后去。从那里它应该遍历给定位置的所有文件夹/文件,并将它们添加到存档中,保持确切的结构。它也应该压缩一切合理的数量。一个给定的未压缩的文件夹/文件集合可以很容易地为10-25gb,创建的跨文件被限制在每个大约1gb。
我有一切工作(使用DotNetZip)。我唯一的挑战就是实际发生的事情很少或根本没有。为了简化代码,我选择使用“AddDirectory”方法,并且一般来说它看起来好像适合我的项目。经过阅读,我第二次猜测这个决定。
考虑下面的代码并存档中的大量文件,我应该压缩每个文件,因为它被添加到压缩?或者Adddirectory方法应该提供相同的压缩?
我已经尝试了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.给下面的代码和档案中的大量文件,我应该压缩每个文件,因为它被添加到压缩?
DotNetZip的工作方式是压缩每个文件,因为它被添加到存档。你的应用程序不需要进行压缩。 DotNetZip为你做这个。
或者应该Adddirectory方法提供大约相同的压缩?
条目添加到经由AddDirectory()方法经过相同的代码路径zip存档被写入时,经由AddFile添加的条目()的zip文件。文件数据被压缩,然后选择加密,然后写入zip文件。
的主动提示:你不需要做:
zip.AddProgress += new EventHandler<AddProgressEventArgs>(Zip_AddProgress);
,你可以这样做:
zip.AddProgress += Zip_AddProgress;
你怎么确定没有压缩发生?
如果您对每个条目的压缩感兴趣,可以注册一个SaveProgress事件处理程序。 SaveProgress事件会在写入档案的过程中的不同时间触发,包括保存开始,DotNetZip开始为一个条目写入数据,在写入一个条目期间的不同时间间隔,完成每个条目的数据写入后,以及完成写入所有数据后。这些阶段在the ZipProgressEventType enumeration中描述。当EventType为Saving_AfterWriteEntry时,可以计算该特定条目的压缩比率。
要验证压缩没有发生,我建议您注册一个SaveProgress事件并查看该压缩比率。
另外,如上所述,某些文件类型不能被压缩。 JPG,MPG,MP3,ZIP文件和其他文件不是非常可压缩的。
最后,如果您只是使用DotNetZip命令行工具,则执行备份可能会容易很多。如果您只想备份特定目录,则可以使用命令行工具(zipit.exe)并避免编写程序。使用zipit.exe工具,如果使用-v选项,该工具将打印进度报告,并将通过上述机制显示每个条目的压缩。即使您更愿意编写自己的程序,也可以考虑在使用DotNetZip时使用zipit.exe来验证压缩是否发生。
由于该限制(z01,z02,z03 ....),正在拆分zip文件。每个分割是1GB,以及也是大约1GB的“父”压缩。 – David 2011-01-26 16:01:53