2012-03-24 34 views
5

Ionic zip me permite agregar un archivo existente al objeto zip y crear un archivo zip. Pero teniendo en cuenta que estoy leyendo esos bytes [] desde el archivo zip creado y enviándolos por el servidor, necesito volver a crear el archivo zip de ese byte [] para almacenar el zip en el servidor. Cómo logro esto ?Ionic Zip: creación de archivo zip desde byte []

Estoy usando C#.

Respuesta

16

Si entiendo bien su pregunta, se obtiene la matriz de datos byte[] través de la red y desea guardar los datos en un archivo zip? Puede crear un nuevo ZipEntry de un MemoryStream el que se crea a partir de la byte[] que tienes (como se muestra en la docs):

byte[] data = MethodThatReceivesYourDataOverTheNet(); 
using (MemoryStream stream = new MemoryStream(data)) 
{ 
    using (ZipFile zip = new ZipFile()) 
    { 
     zip.AddEntry("name_of_the_file_in_the_arhive.bin", "base", stream); 
     zip.Save("example.zip"); 
    } 
} 
+0

Gracias. Eso es exactamente lo que estaba buscando. – Cannon

+0

AddEntry ya no ofrece este constructor. El único que permite que se transmita una secuencia ahora es AddEntry ([fileName], [Stream]). – JRodd

9

en realidad no es claro por su pregunta lo que está haciendo - pero si usted está tratando de evitar que se guarde en el disco y luego volver a cargar para obtener los datos, simplemente guardar en un MemoryStream:

byte[] data; 
using (MemoryStream ms = new MemoryStream()) 
{ 
    zipFile.Save(ms); 
    data = ms.ToArray(); 
} 
// Do whatever with data. 

Como alternativa, utilice MemoryStream.GetBuffer() para evitar hacer otra copia:

byte[] buffer; 
int length; 
using (MemoryStream ms = new MemoryStream()) 
{ 
    zipFile.Save(ms); 
    buffer = ms.ToArray(); 
    length = ms.Length; 
} 

// Now use buffer, but only up to "length"... 
Cuestiones relacionadas