9
votes

Décompresser un flux en C #

Je travaille dans C #, et je télécharge un fichier zip avec un fichier zip avec un fichier XML. Et je souhaite charger ce fichier XML. C'est ce que j'ai jusqu'à présent: xxx

dans document.load Je reçois toujours l'exception suivante:

Le numéro magique dans l'en-tête GZIP n'est pas correct. Assurez-vous que vous passez dans un flux GZIP.

Ce que je fais mal?


3 commentaires

Téléchargez-vous un gzip ou un zip ? Les deux ne sont pas les mêmes.


zip! = gzip - voir en.wikipedia.org/wiki/gzip et en.wikipedia.org/wiki/zip_%28file_format%29


Je suppose que c'est ma première erreur. C'est un fichier zip non gzip.


5 Réponses :


5
votes

J'utilise Sharpziplib et ça marche bien!

ci-dessous est une fonction qui encapsule la bibliothèque xxx


0 commentaires

1
votes

de Classe Gzipstream Description: < / p>

Les objets gzipstream compressés écrites dans un fichier avec une extension de .gz peuvent être décompressés en utilisant de nombreux outils de compression courants; Cependant, cette classe ne fournit pas de manière intrinsèquement fonctionnalité pour ajouter des fichiers à ou extraire des fichiers à partir d'archives .zip

Donc, à moins que vous contrôlez des fichiers côté serveur, je vous suggère de rechercher une bibliothèque spécifique ciblée à zip (SharpziPLib par exemple).


0 commentaires

2
votes

Comme les autres ont mentionné GZIP et ZIP ne sont pas les mêmes, vous devrez peut-être utiliser une bibliothèque ZIP. J'utilise une bibliothèque appelée: DotNetZip - disponible sur le site ci-dessous:

http://dotnetzip.codeplex.com/


0 commentaires

9
votes

Apparemment SharpziPLib est maintenant non saintimé et vous voulez probablement éviter: https://stackoverflow.com/a/593030

in .NET 4.5 Il y a maintenant Prise en charge intégrée pour les fichiers Zip , donc pour votre exemple ce serait: < / p> xxx


1 commentaires

Si vous souhaitez que les autres formats de compression ne sont pas pris en charge comme TGZ prenant en charge .NET CORE et NETFX ESSSY Github.com/adamHcock/ SharpCompress



9
votes

Si vous avez un tableau d'octets contenant une archive ZIP avec un seul fichier, vous pouvez utiliser la classe ziparaRarchive pour obtenir un tableau d'octets décompressé avec les données du fichier. ZipRarchive est contenu dans .NET 4.5, dans l'assemblage system.io.cression.filesystem (vous devez le référencer explicitement).

La fonction suivante, adaptée de Cette réponse , fonctionne pour moi: xxx


0 commentaires