2011-10-14 13 views
6

Estoy usando el siguiente código para comprimir un archivo y funciona bien, pero cuando descomprimo con WinRar obtengo el nombre del archivo original sin la extensión, cualquier pista ¿por qué si el nombre del archivo es myReport.xls cuando lo descomprimo? solo myReport?GZipStream funciona pero la extensión se ha perdido

using (var fs = new FileStream(fileName, FileMode.Open)) 
{ 
    byte[] input = new byte[fs.Length]; 
    fs.Read(input, 0, input.Length); 
    fs.Close(); 

    using (var fsOutput = new FileStream(zipName, FileMode.Create, FileAccess.Write)) 
    using(var zip = new GZipStream(fsOutput, CompressionMode.Compress)) 
    { 
     zip.Write(input, 0, input.Length); 
     zip.Close(); 
     fsOutput.Close(); 
    } 
} 
+1

yo sepa GZip no tiene idea acerca de los archivos o carpetas ... otoh postal es muy diferente de la que ya tiene todo este archivo que incluye atributos, etc. incorporados ... ¿tal vez quiere usar una biblioteca Zip? – Yahia

+0

IOW, GZip es un formato de compresión, mientras que ZIP es un formato de archivo comprimido. (TAR sería un ejemplo de formato de archivo). –

Respuesta

12

GZip solo comprime un archivo, sin saber el nombre. Por lo tanto, si comprime el archivo myReport.xls, debe ponerle el nombre myReport.xls.gz. En la descompresión, se eliminará la última extensión de archivo para que termine con el nombre de archivo original.

que su la manera cómo se utiliza en Unix/Linux para las edades ...

+0

Gracias, este fue el problema, ahora resuelto simplemente añadiendo la extensión en lugar de reemplazarla con .zip. –

2

muy raro de hecho. Una breve búsqueda se le ocurrió la siguiente:

http://dotnetzip.codeplex.com/discussions/268293

que dice que GZipStream no tiene manera de saber el nombre de la corriente que se está escribiendo, y sugiere que establezca directamente la propiedad FileName.

Espero que ayude.

+0

no, no funciona porque el objeto zip no tiene nombre o propiedad FileName para asignar. Intenté con .NET 3.5 y .NET 4 pero sin diferencias ... :( –

+0

@Davide Piras Pero si usa DotNetZip tiene el método 'AddFile' - toma el nombre del archivo y lo almacena ... GZip es algo diferente de ZIP aunque los nombres son bastante similares ... – Yahia

Cuestiones relacionadas