Bonjour à tous,

J'ai un problème et j'aurais grand besoin de votre aide.

Je dois compresser des fichiers (j'utilise SharpZipLib), pour ensuite convertir le flux en string pour l'envoyer via Web Service.

Voici habituellement comment s'utilise la compression :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
            FileStream fs = File.Create(@"c:\toto.zip");
 
            using (ZipOutputStream zip = new ZipOutputStream(fs))
            {
En faisant ceci, j'ai bien un fichier .zip de créé, avec tous les fichiers que je souhaite dedans.

Etant donné que je veux convertir ce flux en string, passer par l'objet MemoryStream, puis faire un ToArray() et ensuite convertir en base 64 est plus logique.

Je fais donc ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
            MemoryStream ms = new MemoryStream();
 
            using (ZipOutputStream zip = new ZipOutputStream(ms))
            {
et à la fin un

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
byte[] bytedata = ms.ToArray();
Je converti en base 64 pour l'envoyer via le Web Service :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
            string strBase64 = Convert.ToBase64String(bytedata);

Le WebService recoit donc une chaine de caractère et effectue le traitement, à savoir l'enregistrement sur le disque du fichier zip recu :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
            byte[] tabByte = Convert.FromBase64String(strBase64);
 
            File.WriteAllBytes(@"c:\dumped.zip", tabByte);
Or quand j'ouvre ce fichier zip, tous les fichiers sont présents, mais il y a toujours un fichier vide (0 octet) !

Il n'y a pas de problème de compression étant donné que le FileStream crée bien le fichier correctement, et tous les fichiers sont bien présents et font la bonne taille via cette méthode.

Pourriez vous m'éclairer svp, je suis vraiment bloqué.

Je vous remercie,

Antoine.