2010-06-19 22 views
1

J'utilise C# pour compresser par programme un fichier xml. La compression fonctionne correctement, mais lorsque je lance le fichier depuis la ligne de commande, l'extension a été supprimée. Pourquoi cela serait-il?Pourquoi la compression programmatique supprime-t-elle l'extension de fichier?

Le fichier de destination qui arrive a l'extension gz alors que le fichier source a une extension xml.

Voici mon code de compression:

  using (FileStream input = File.OpenRead(filename)) 
      { 
       using (var raw = File.Create(destFilename)) 
       { 
        using (Stream gzipStream = new GZipStream(raw, CompressionMode.Compress)) 
        { 
         byte[] buffer = new byte[4096]; 
         int n; 
         while ((n = input.Read(buffer, 0, buffer.Length)) != 0) 
         { 
          gzipStream.Write(buffer, 0, n); 
         } 
        } 
       } 
      } 

Cela se produit également lorsque j'utilise une bibliothèque 3ème partie (SharpLibZip) pour compresser le fichier. Comment puis-je conserver l'extension dans le fichier compressé zip?

Comment conserver l'extension dans le fichier zip compressé?

+1

Que la valeur de 'destFilename'? – ChrisF

+0

J'ai essayé filename.xml.gz et filename.gz –

Répondre

4

Vous devez probablement le nom de votre fichier compressé filename.xml.gz - l'extension gz obtient retiré intentionnellement, et l'extension de la source n'est pas stockée dans l'archive, IIRC

+4

Il est également évident en regardant le code. Ils ne font que compresser un flux d'octets, pas un fichier (y compris les métadonnées) en soi. Il n'y a donc aucun moyen que l'archive finale * puisse * avoir le nom du fichier. – Joey

+0

Ceci est la convention standard pour GZip. Cela fonctionne différemment de, par exemple, Zip, qui inclut des métadonnées de fichier. –