...问候
我正在使用最新的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();
}
感谢您的帮助!
答案 0 :(得分:2)
我不确定是否低估了您的问题,但是任何zip文件its 4Gb的最大尺寸。也许你必须在每次达到这个限制时创建一个新的ZipFile
。
很抱歉,如果这对你没有帮助。
答案 1 :(得分:2)
1.如果将每个文件添加到zip中,我应该压缩下面的代码和存档中的大量文件吗?
DotNetZip的工作方式是在将每个文件添加到存档时压缩它们。您的应用不需要进行压缩。 DotNetZip为您完成此任务。
或Adddirectory方法是否应该提供相同的压缩?
通过AddDirectory()方法添加到zip文件的条目在写入zip存档时通过相同的代码路径,作为通过AddFile()添加的条目。压缩文件数据,然后可选地加密,然后写入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选项,该工具将打印进度报告,并将通过上述机制显示每个条目的压缩。即使您更喜欢编写自己的程序,也可以考虑使用zipit.exe来验证使用DotNetZip时是否发生压缩。
答案 2 :(得分:1)
您要压缩哪种数据?某些类型的数据不能很好地压缩,例如JPEG或已压缩的ZIP文件。