DotNetZip BadReadException en .Extracto de

Tengo una extraña archivo que cuando zip con DotNetZip crea un ‘ununzipable » archive». Cuando trato de descomprimirlo con 7zip falla con CRC failed in 'AjaxControlToolkit.dll'. File is broken. Cuando me zip con 7zip manualmente se baja la cremallera de multa.

Alguien ha llegado a través de un escenario donde DotNetZip no comprimir un simple archivo binario correctamente? O estoy utilizando 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);
        }
    }
}

Lanza:

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

Edición:

Si puedo añadir un byte extra, funciona muy bien, pero no es una solución aceptable. Falla sin la + 1.

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

Actualización:

Renunció y pasó a SharpZipLib como no explotar simple extracto, pero seguro que sería bueno saber lo que estaba mal con DotNetZip, tiene un API bastante mejor.

Update2:

Algo sobre la extensión de archivo hace volar, 1179647 y 1179649 bytes comprimido y descomprimido correctamente.

var source = new FileInfo(@"C:\ZipDemo\foo.txt");
using (var writer = source.CreateText())
    writer.Write(new string('a', 1179648));
  • Y ¿qué sucede si se intenta descomprimir con alguna otra herramienta, digamos, WinRar ?
  • acaba de obtener varios errores, es decir, con construido en Windows extractor puedo obtener 0 x 80004005 error no especificado.
  • Trate de ZipArchive de .net 4.5, en el Sistema.IO.La compresión, a ver si tiene el mismo problema. Bien puede ser un error.

3 Kommentare

  1. 16

    Tamaño de su archivo dll 53*128 kb (6954496/131072 = 53), y hay un error en la DotNetZip como se puede leer allí : https://dotnetzip.codeplex.com/workitem/14087. Sólo usar en el código:

    zip.ParallelDeflateThreshold = -1;

    He tenido este problema por la gran cantidad de archivos, funciona a la perfección ahora 😉

    • se trabajó con así! Gracias mucho 🙂
    • Esto resuelve el mismo problema en C#4.5 método de Compresión de Archivos también 🙂
    • Gracias! Esta es la solución fácil y suficiente para mí. La compilación de la corrección sugerida por @laktak a continuación es probablemente la mejor opción, pero probablemente innecesario, a menos que usted realmente necesita la optimización de paralelo a desinflar. Es una pena que el código oficial de repos parece haber estado inactivo desde 2011 – no sé si hay una versión más activo, que continuó la actualización o no.
  2. 2

    He probado este –

    • Instalar la Última versión de DotNetZip
    • Ejecutar su código.
    • Consiguió el BadReadException

    Entonces esta –

    • Instalar una versión anterior (1.9) de DotNetZip. (Install-Package DotNetZip -Version 1.9)
    • Ejecutar su código
    • Código funciona bien.

    Supongo que esto podría ser un error?

    • Parece que, presentado un error dotnetzip.codeplex.com/workitem/16092 no se puede saber si hay otros como él, parece como CodePlex sí se hallan roto y no mostrar el workitem descripciones.
    • Fresco. Se han actualizado su error con el ejemplo de que pudiera conseguir un trabajo, debe ser útil para cualquier persona de solución de problemas.
    • esa no es la solución ! Como cambiar la versión, el tamaño está cambiando, así que no veo el problema … por ahora. Pero la próxima actualización, el problema puede accurs de nuevo !
    • no estoy seguro de que entiendo su punto. Todo lo que hice fue agregar un archivo a archivo, extraer y comparar con el original. Se produjo una excepción. Ref este problema para algunos análisis sobre estas líneas.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Recent Articles

Python «set» con duplicados/elementos repetidos

Hay una forma estándar de representar un "conjunto" que puede contener elementos duplicados. Como yo lo entiendo, un conjunto tiene exactamente un cero o...

Python: generador de expresión vs rendimiento

En Python, ¿hay alguna diferencia entre la creación de un generador de objetos a través de un generador de expresión versus el uso de...

Cómo exportar/importar la Masilla lista de sesiones?

Hay una manera de hacer esto? O tengo que tomar manualmente cada archivo de Registro? InformationsquelleAutor s.webbandit | 2012-10-23

no distingue mayúsculas de minúsculas coincidentes en xpath?

Por ejemplo, para el xml a continuación <CATALOG> <CD title="Empire Burlesque"/> <CD title="empire burlesque"/> <CD...