He estado leyendo durante un tiempo acerca de GZipStream
y su método Write
. Lo que intento hacer es convertir los datos comprimidos de la secuencia y ponerlos en una matriz de bytes. Te dejaré mi código a continuación, ya que creo que será de gran ayuda.GZipStream.Write Método
public static void Compress(byte[] fi)
{
using (MemoryStream inFile = new MemoryStream(fi))
using (FileStream outFile = File.Create(@"C:\Compressed.exe"))
using (GZipStream Compress = new GZipStream(outFile, CompressionMode.Compress))
{
inFile.CopyTo(Compress);
}
}
En lugar de escribir en un archivo en mi disco, me gustaría escribir los datos comprimidos en una matriz de bytes, y luego devolver la matriz de bytes (suponiendo que hice esta función, por supuesto).
De hecho, estoy viniendo a través de un pequeño error cuando se utiliza el MemoryStream. Mi versión anterior produjo un archivo comprimido de 2.62kb, pero cuando se usa la secuencia de memoria, la versión comprimida es de 2.61 kb. Cuando descomprimo el archivo, el resultado se rompe (no se ejecutará). ¿Alguna sugerencia? –
@Evan, tienes razón. Parece que 'GZipStream' escribe algo de información final sobre la transmisión cuando está desechando, por lo que primero debe desecharla y solo luego devolver el resultado. Ver respuesta actualizada. – svick
OH MY GOSH - ¡funciona! Tengo que preguntar ... ¿cómo encontraste esa información ... He pasado casi 2 horas tratando de hacer que esto funcione ahora? Qué gran sentimiento, tan cerca. Muchas gracias –