net extracttodirectory example descomprimir c# zipfile

c# - extracttodirectory - No se pudo encontrar el final del registro del Directorio Central



using zipfile (7)

Acabo de encontrarme con este hilo cuando tuve el mismo error de un script de PowerShell que llama al método Net.WebClient DownloadFile.

En mi caso, el problema fue que el servidor web no pudo proporcionar el archivo zip solicitado, y en su lugar proporcionó una página HTML con un mensaje de error, que obviamente no se pudo descomprimir.

Así que en lugar de eso, creé un controlador de excepciones para extraer y presentar el mensaje de error "real".

Estoy descargando un archivo zip usando el programa c # y me aparece el error

at System.IO.Compression.ZipArchive.ReadEndOfCentralDirectory() at System.IO.Compression.ZipArchive.Init(Stream stream, ZipArchiveMode mode, Boolean leaveOpen) at System.IO.Compression.ZipArchive..ctor(Stream stream, ZipArchiveMode mode, Boolean leaveOpen, Encoding entryNameEncoding) at System.IO.Compression.ZipFile.Open(String archiveFileName, ZipArchiveMode mode, Encoding entryNameEncoding) at System.IO.Compression.ZipFile.ExtractToDirectory(String sourceArchiveFileN ame, String destinationDirectoryName, Encoding entryNameEncoding) at System.IO.Compression.ZipFile.ExtractToDirectory(String sourceArchiveFileN ame, String destinationDirectoryName)

Aquí está el programa

response = (HttpWebResponse)request.GetResponse(); Stream ReceiveStream = response.GetResponseStream(); byte[] buffer = new byte[1024]; FileStream outFile = new FileStream(zipFilePath, FileMode.Create); int bytesRead; while ((bytesRead = ReceiveStream.Read(buffer, 0, buffer.Length)) != 0) outFile.Write(buffer, 0, bytesRead); outFile.Close(); response.Close(); try { ZipFile.ExtractToDirectory(zipFilePath, destnDirectoryName); } catch (Exception e) { Console.WriteLine(e.ToString()); Console.ReadLine(); }

No entiendo el error. ¿Alguien puede explicar esto? Gracias MR


De tu antigua pregunta has eliminado.

Obtengo System.IO.InvalidDataException: No se pudo encontrar el final del registro del Directorio Central.

Lo más probable es que el archivo que está pasando tenga un formato incorrecto y el Zip esté fallando. Como ya tiene el archivo outfile en el disco duro, le recomendaría intentar abrir ese archivo con Windows integrado en el extractor de zip y ver si funciona. Si falla, el problema no es con el código de descompresión sino con los datos que el servidor le está enviando.


El problema es que Unzip no puede encontrar la línea de código que señala el final del archivo, así que:

  1. El archivo está corrupto.
  2. No es un archivo .zip. (puede ser un .rar u otro tipo comprimido)
  3. Hay más de 1 parte en el archivo. (Multi parte zip)

Abrir el archivo con tu utilidad de zip favorita te dirá cuál de estos podría ser.


Me encontré con este mismo problema. Hay muchos tipos de compresión, y .zip es solo uno de los tipos. Observe y asegúrese de que no está intentando ''descomprimir'' un archivo .rar o similar.


Podría ser útil para otra persona. Traté esto agregando una excepción a mi código, que luego:

  1. Crea un directorio temporal.
  2. Extrae el archivo zip (normalmente funciona)
  3. Cambia el nombre del archivo zip original a * .bak
  4. Comprime y reemplaza el archivo original por uno que funciona

Tengo el mismo problema, pero en mi caso el problema es con la parte de compresión y no con la descompresión.

Durante la compresión necesito usar el estado "Usando" con los objetos Stream y ZipArchive también. El estado "Utilizando" cerrará el archivo correctamente y puedo descomprimirlo sin ningún problema.

El código de trabajo en mi caso en VB.Net:

Using zipSteramToCreate As New MemoryStream() Using archive As New ZipArchive(zipSteramToCreate, ZipArchiveMode.Create) '' Add entry... End Using '' Return the zip byte array for example: Return zipSteramToCreate.ToArray End Using


Usé la biblioteca SharpCompress C # .net disponible a través del gestor de paquetes Nuget, resolvió mi propósito de descomprimir.