Dotnetzip中大量文件存档的压缩问题
-
24-10-2019 - |
题
问候....
我使用HTE最新的dotnetzip在C#3.5中编写了一个备份程序。该程序的基础应在服务器上给出一个位置和跨度zip文件的最大大小并进行。从那里开始,它应该从给定的位置遍历所有文件夹/文件,并将它们添加到存档中,并保持确切的结构。它还应将所有内容压缩到合理的数量。给定的未压缩的文件夹/文件集合可以很容易地为10-25GB,创建的跨度文件限于每个约1GB。
我的一切都可以使用(使用dotnetzip)。我唯一的挑战是,实际上几乎没有发生侵犯。我选择使用“ AddDirectory”方法来简化代码,并且通常看起来对我的项目的适合程度。阅读后,我第二次猜测这个决定。
给定以下代码和存档中的大量文件,我应该在添加到zip时压缩每个文件吗?还是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.启动以下代码和存档中的大量文件,我是否应该在将其添加到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文件。