인사말 ....DotNetZip에있는 파일의 대용량 압축 문제가 있습니다.
저는 최신 DotNetZip을 사용하여 C# 3.5의 백업 프로그램을 작성하고 있습니다. 프로그램의 기본 사항은 서버의 위치와 스팬 된 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(); }
Cheeso에 응답 해 주셔서 감사합니다. 그것은 내가 필요로하는 definatly 정보이었다. 내가 압축을하지 않는다는 이유는 원래 파일 세트와 압축 파일 세트가 거의 같은 크기이기 때문입니다. 나는 압축 파일, 이미지, 음악 파일이 거의 없다는 것을 확인했습니다. 귀하의 권장 사항을 시도하고 SaveProgress 이벤트를 모니터링하여 적어도 평균 압축을 얻습니다. 다시 의견에 감사드립니다. – David