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 :
En faisant ceci, j'ai bien un fichier .zip de créé, avec tous les fichiers que je souhaite dedans.
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)) {
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 :
et à la fin un
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)) {
Je converti en base 64 pour l'envoyer via le Web Service :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 byte[] bytedata = ms.ToArray();
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 :
Or quand j'ouvre ce fichier zip, tous les fichiers sont présents, mais il y a toujours un fichier vide (0 octet) !
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);
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.
Partager