Cómo corregir el archivo corrupto del archivo ZIP al descargar archivos grandes con iónico-cremallera en C # -- # campo con ionic-zip camp Relacionados El problema

How to fix zip file corrupt error while downloading large files with Ionic-zip in c#


1
vote

problema

Español

Obtención de errores de error corrupto al descargar archivos grandes usando ionic.zip en C #. Cuando el usuario extrae ese archivo archivo corrupto se muestra. Cuando estoy haciendo lo mismo con ningún archivo más pequeño de lo que está funcionando bien. Incluso no está dando ningún error al crear archivos ZIP. Estoy creando un archivo ZIP de los archivos PDF existentes que se agregan en un archivo ZIP. Puede haber 5 archivos o 1000 archivos de mínimo de 10 MB cada uno.

He intentado con umbral y todas las demás opciones proporcionadas en Google, pero no encontré ninguna solución.

  using (ZipFile zip = new ZipFile()) {     zip.AlternateEncodingUsage = ZipOption.AsNecessary;     zip.CompressionLevel = Ionic.Zlib.CompressionLevel.Level9;     //zip.AddDirectoryByName("Files");      for (int i = 0; i < dt.Rows.Count; i++)     {         filePath = Convert.ToString(dt.Rows[i]["filePath"]);         fileIds.Add(Convert.ToInt32(dt.Rows[i]["fileid"]));         string fileFullName = Convert.ToString(dt.Rows[i]["fileName"]);         string fName = Convert.ToString(dt.Rows[i]["fileName"]).Split('_')[1];          //ExceptionLogging c1 = new ExceptionLogging("filePath = " + filePath + " fileFullName = " + fileFullName +         //    " fName = " + fName);         //c1.ErrorLog(HttpContext.Current.ApplicationInstance.Server.MapPath("~/Logs/"));           if (!fileNamesList.Contains(fileFullName.Split('_')[0]))         {             //ExceptionLogging c2 = new ExceptionLogging("In if condition -- filePath = " + filePath);             //c2.ErrorLog(HttpContext.Current.ApplicationInstance.Server.MapPath("~/Logs/"));              zip.AddFile(filePath, "Files");             fileNamesList.Add(fileFullName.Split('_')[0]);         }         else         {             filePath = filePath.Substring(0, filePath.Length - 4) + "_" + fName;             //filePath = filePath.Split('.')[0] + "_" + fName;             zip.AddFile(filePath, "Files");             fileNamesList.Add(fileFullName);              //ExceptionLogging c3 = new ExceptionLogging("In else condition -- filePath = " + filePath + " fileFullName = " + fileFullName);             //c3.ErrorLog(HttpContext.Current.ApplicationInstance.Server.MapPath("~/Logs/"));         }         //zip.AddFile(filePath, "Files");     }      Response.Clear();     Response.BufferOutput = false;     string zipName = String.Format("ZipFile-{0}.zip", DateTime.Now.ToString("yyyy-MMM-dd-HHmmss"));     Response.ContentType = "application/zip";     Response.AddHeader("content-disposition", "attachment; filename=" + zipName);     zip.Save(Response.OutputStream);     //Response.End();     HttpContext.Current.ApplicationInstance.CompleteRequest(); }   

Debería poder descargar archivos grandes dentro de ZIP.

Original en ingles

Getting error file corrupt error when downloading large files using Ionic.zip in c#. When user extracts that file file corrupt is being shown. When i am doing same with smaller no of files than it is working fine. Even it is not giving any error while creating zip files. I am creating zip file of existing pdf files which are added in one zip files. There may be 5 files or may 1000 files of minimum 10 MB each.

I have tried with threshold and all other options provided on google, but didn't find any solutions.

using (ZipFile zip = new ZipFile()) {     zip.AlternateEncodingUsage = ZipOption.AsNecessary;     zip.CompressionLevel = Ionic.Zlib.CompressionLevel.Level9;     //zip.AddDirectoryByName("Files");      for (int i = 0; i < dt.Rows.Count; i++)     {         filePath = Convert.ToString(dt.Rows[i]["filePath"]);         fileIds.Add(Convert.ToInt32(dt.Rows[i]["fileid"]));         string fileFullName = Convert.ToString(dt.Rows[i]["fileName"]);         string fName = Convert.ToString(dt.Rows[i]["fileName"]).Split('_')[1];          //ExceptionLogging c1 = new ExceptionLogging("filePath = " + filePath + " fileFullName = " + fileFullName +         //    " fName = " + fName);         //c1.ErrorLog(HttpContext.Current.ApplicationInstance.Server.MapPath("~/Logs/"));           if (!fileNamesList.Contains(fileFullName.Split('_')[0]))         {             //ExceptionLogging c2 = new ExceptionLogging("In if condition -- filePath = " + filePath);             //c2.ErrorLog(HttpContext.Current.ApplicationInstance.Server.MapPath("~/Logs/"));              zip.AddFile(filePath, "Files");             fileNamesList.Add(fileFullName.Split('_')[0]);         }         else         {             filePath = filePath.Substring(0, filePath.Length - 4) + "_" + fName;             //filePath = filePath.Split('.')[0] + "_" + fName;             zip.AddFile(filePath, "Files");             fileNamesList.Add(fileFullName);              //ExceptionLogging c3 = new ExceptionLogging("In else condition -- filePath = " + filePath + " fileFullName = " + fileFullName);             //c3.ErrorLog(HttpContext.Current.ApplicationInstance.Server.MapPath("~/Logs/"));         }         //zip.AddFile(filePath, "Files");     }      Response.Clear();     Response.BufferOutput = false;     string zipName = String.Format("ZipFile-{0}.zip", DateTime.Now.ToString("yyyy-MMM-dd-HHmmss"));     Response.ContentType = "application/zip";     Response.AddHeader("content-disposition", "attachment; filename=" + zipName);     zip.Save(Response.OutputStream);     //Response.End();     HttpContext.Current.ApplicationInstance.CompleteRequest(); } 

I should be able to download large files inside zip.

     

Lista de respuestas

0
 
vote

Mi explicación necesita más espacio que un comentario:

En plataformas X32 El límite de RAM utilizable para .Net está sujeta el programa para comprimir archivos en tamaños más grandes. Intente cambiar a x64 temporalmente y eso podría solucionar su problema.

También sugiero la investigación sobre LOH (Montón de objetos grandes) que sabiendo que será útil para usted en el futuro tratado con este tipo de escenarios:

Un artículo sobre loh

 

My explanation needs more space than a comment:

On x32 platforms the usable ram limit for .Net is holding the program to compress files in larger sizes. Try switching to x64 temporarily and that might fix your problem.

I also suggest research about LOH (Large Object Heap) which knowing it will come in handy for you in future dealing with these kind of scenarios:

An article about LOH

 
 

Relacionados problema

2  Apertura y edición de una contraseña protegida con cremallera en DotNetcore  ( Opening and edting an password protected zip in dotnetcore ) 
¿Hay alguna manera de trabajar con archivos ZIP protegidos por contraseña en DotNetcore? Desafortunadamente, System.IO.IO.ION no admite la protección de contr...

0  Argumento  ( Argumentexception ) 
Estoy haciendo un simple formulario de inicio de sesión y obteniendo la siguiente excepción ArgumentException fue atrapado. No existe mapeo de tipo de obje...

2  C # - ¿Cómo comprobar si el archivo zip se divide?  ( C sharp how to check if zip file is split ) 
Quiero respaldar los archivos Split Zip en mi proyecto y para tener diferentes implementaciones caso, el archivo zip se divide o no. ¿Cómo puedo verificar si ...

4  Error - Error de red en Get Zip Archivo en Chrome  ( Failed network error in get zip file in chrome ) 
Estoy creando una cremallera por Ionic.Zip.dll como este (ASP.NET, C #): zip.AddEntry("Document.jpeg", File.ReadAllBytes("Path"); Quiero descargarlo ...

1  Cómo verificar el archivo existe o no en Winrar, 7ZIP, ZIP, TAR, WinZip en C #  ( How to check file exist or not in winrar 7zip zip tar winzip in c sharp ) 
En mi proyecto, estoy cargando un 07-04-20100 , 07-04-20101111 , 07-04-20102 , 07-04-20103 , 07-04-20104 , y etc. Archivo. Ahora quiero verificar si el...

1  PushStreamContent y ionic.zip  ( Pushstreamcontent and ionic zip ) 
My WOBAPI MÉTODO PARA COMPRARSE EN LA VUELA UTILICE ESTE CÓDIGO var result = new HttpResponseMessage(HttpStatusCode.OK) { Conte...

0  Cómo usar zip iónica o DOT postal neto en ASP clásico  ( How to use ionic zip or dot net zip in asp classic ) 
¿Cómo puedo usar zip iónica o biblioteca postal dotnet en ASP clásico a archivo zip extracto? Soy muy nuevo en ASP clásico. Entonces, ¿podría por favor elabor...

0  ¿Cómo puedo detener la cremallera iónica de agregar nula al final de un archivo?  ( How can i stop ionic zip from appending null to the end of a file ) 
Tengo un VB.NET (ASPX) que recibe un archivo (flujo de datos) de mi aplicación, y dependiendo de los interruptores guardará el archivo, ya que es o comprimir ...

4  COMPRESS ARCHIVO UTILIZANDO IONIC.ZIP CON BARRA DE PROGRESO [FORMULTOS DE WINDOWS]  ( Compress file using ionic zip with progress bar windows forms ) 
Estoy preparando una aplicación que crea un archivo zip para un directorio determinado. Quiero que se muestren las siguientes cosas mientras se crea una cre...

3  Ionic.ZIP extracto archivos e ignore la contraseña  ( Ionic zip extract files and ignore password ) 
Estoy usando ionic.zip (versión de marco compacta) en mi proyecto Pocket-PC. La extracción de archivos con cremallera (usando ionic.zip) está funcionando c...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos