2011-04-06 2 views
0

J'utilise le code C# suivant pour compresser un fichier:GZipStream ne fonctionne pas

// Open the stream we want to compress 
FileStream fs = File.Create(@"C:\Projects\Samples\test\compressed.zip", 0); 

// Creates the GZipStream 
GZipStream gzip = new GZipStream(fs, CompressionMode.Compress); 

// Reading the content to compress 
byte[] bytes = File.ReadAllBytes(@"C:\Projects\Samples\samplefile.xml"); 

// Writing compressed content 
gzip.Write(bytes, 0, bytes.Length); 
gzip.Close(); // This also closes the FileStream (the underlying stream) 

Cependant, quand j'Extrayez le fichier depuis l'explorateur Windows le fichier perd son extension donc au lieu de samplefile.xml il devient juste samplefile . La même chose s'est produite avec le fichier .txt pas seulement le fichier .xml.

Pouvez-vous m'aider à voir ce que je fais mal?

Répondre

1

ok trouvé le problème:

Ligne 2 doit être comme suit:

FileStream fs = File.Create (@ "C: \ Projects \ Samples \ test \ compressed.xml.zip", 0);

0

GZipStream ne crée pas d'archives zip. Il crée un fichier gzip, qui ne contient qu'un seul fichier, et ne stocke pas nécessairement un nom de fichier. Normalement, vous devez utiliser l'extension .gz pour identifier un fichier gzip, et il est classique d'utiliser le nom complet du fichier original avec .gz ajouté à la fin. Voir aussi ici pour plus d'informations sur le format gzip: http://en.wikipedia.org/wiki/Gzip#File_format

Si vous voulez vraiment créer des archives zip, vous voudrez peut-être utiliser une bibliothèque comme SharpZipLib: http://www.icsharpcode.net/opensource/sharpziplib/