net instalar descomprimir c# dotnetzip

instalar - zip dll c#



DotNetZip BadReadException en.Extract (3)

Tengo un archivo extraño que cuando se comprime con un archivo DotNetZip crea un archivo ''no descargable''. Cuando intento descomprimirlo con 7zip, falla con CRC failed in ''AjaxControlToolkit.dll''. File is broken. CRC failed in ''AjaxControlToolkit.dll''. File is broken. Cuando lo cierre con 7zip manualmente, se descomprime bien.

¿Alguien se ha topado con un escenario donde DotNetZip no puede comprimir correctamente un archivo binario simple? ¿O estoy usando DotNetZip incorrectamente?

https://dl.dropbox.com/u/65419748/AjaxControlToolkit.dll

using System.IO; using Ionic.Zip; namespace ConsoleApplication1 { public class Program { public static void Main(string[] args) { var source = new FileInfo(@"C:/ZipDemo/AjaxControlToolkit.dll"); var target = new FileInfo(Path.ChangeExtension(source.FullName, "zip")); var folder = new DirectoryInfo(Path.ChangeExtension(source.FullName, null)); if (target.Exists) target.Delete(); if (folder.Exists) folder.Delete(true); using (var zip = new ZipFile(target.FullName)) { zip.AddFile(source.FullName, string.Empty); zip.Save(); } using (var zip = new ZipFile(target.FullName)) zip.ExtractAll(folder.FullName); } } }

Tiros

Unhandled Exception: Ionic.Zip.BadReadException: bad read of entry AjaxControlToolkit.dll from compressed archive. at Ionic.Zip.ZipEntry._CheckRead(Int32 nbytes) at Ionic.Zip.ZipEntry.ExtractOne(Stream output) at Ionic.Zip.ZipEntry.InternalExtract(String baseDir, Stream outstream, String password) at Ionic.Zip.ZipFile._InternalExtractAll(String path, Boolean overrideExtractExistingProperty) at Ionic.Zip.ZipFile.ExtractAll(String path) at ConsoleApplication1.Program.Main(String[] args) in C:/ZipDemo/ConsoleApplication1/ConsoleApplication1/Program.cs:line 27

Editar:

Si agrego un byte extra, funciona bien, pero no es una solución aceptable. Falla sin el + 1 .

var bytes = new byte[source.Length + 1]; File.ReadAllBytes(source.FullName).CopyTo(bytes, 0); zip.AddEntry(source.Name, bytes);

Actualizar:

Renunció y cambió a SharpZipLib ya que no explota en un simple extracto, pero seguro que sería bueno saber qué estaba mal con DotNetZip, tiene una API más agradable.

Actualización2:

Algo sobre la longitud del archivo lo hace explotar, 1179647 y 1179649 bytes están comprimidos y descomprimidos correctamente.

var source = new FileInfo(@"C:/ZipDemo/foo.txt"); using (var writer = source.CreateText()) writer.Write(new string(''a'', 1179648));


El tamaño de su dll es 53 * 128k (6954496/131072 = 53), y hay un error en DotNetZip que puede leer allí: https://dotnetzip.codeplex.com/workitem/14087 . Solo usa en tu código:

zip.ParallelDeflateThreshold = -1;

Tuve este problema por muchos archivos, ahora funciona perfectamente;)


Es un error: puede solucionarlo en Zlib/ParallelDeflateOutputStream.cs .

cambio

} while (doAll && (_lastWritten != _latestCompressed));

a

} while (doAll && (_lastWritten != _lastFilled));

Consulte https://dotnetzip.codeplex.com/workitem/14087 para obtener más información.


Probé esto

  • Instalar la última versión de DotNetZip
  • Ejecuta tu código.
  • Tengo la BadReadException

Luego esto -

  • Instale una versión anterior (1.9) de DotNetZip. ( Install-Package DotNetZip -Version 1.9 )
  • Corre tu codigo
  • El código funciona bien.

Supongo que esto podría ser un error?