Sauvegarde de stream dans un .csv, .xls... [Résolu]

Messages postés
71
Date d'inscription
vendredi 9 mars 2007
Statut
Membre
Dernière intervention
12 avril 2010
- - Dernière réponse : renyone
Messages postés
71
Date d'inscription
vendredi 9 mars 2007
Statut
Membre
Dernière intervention
12 avril 2010
- 29 janv. 2009 à 11:26
Bonjour à tous.
Je vous explique mon problème: j'interroge un server exchange pou récupérer des pieces jointes dans des mails. Ces pieces jointes sont de tout type: xls, csv etc. La réponse est sous la forme de stream et il faut que j enregistre le stream au bon format.

Voici mon bout de code:
                Stream sr = REPONDSEDUSERVER();
                string sa = sr.ReadToEnd();
                StreamWriter sw = new StreamWriter(@"C:toto.ext");
                sw.Write(sa);
                sw.Close();

Ca, ca marche que si ext est de type .txt ou .xml.

Comment enregistrer un stream dans un format tel csv ou xls dans ce cas ?

Merci d avance.
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
71
Date d'inscription
vendredi 9 mars 2007
Statut
Membre
Dernière intervention
12 avril 2010
3
3
Merci
Salut!
En fait j'ai tout simplement recopié bit à bit le stream dans un filestream local.

Stream stream = REPONSE DU SERVER;
byte[] bytesTab = ReadFully(stream, 0);
FileStream s = new FileStream(fileName, FileMode.Create);
foreach (byte b in bytesTab)
{
      s.WriteByte(b);
 }
     s.Close();

public static byte[] ReadFully(System.IO.Stream stream, int initialLength)
        {
          
            if (initialLength < 1)
            {
                initialLength = 32768;
            }

            byte[] buffer = new byte[initialLength];
            int read = 0;

            int chunk;
            while ((chunk = stream.Read(buffer, read, buffer.Length - read)) > 0)
            {
                read += chunk;

              
                if (read == buffer.Length)
                {
                    int nextByte = stream.ReadByte();

                    // End of stream? If so, we're done
                    if (nextByte == -1)
                    {
                        return buffer;
                    }

                  
                    byte[] newBuffer = new byte[buffer.Length * 2];
                    Array.Copy(buffer, newBuffer, buffer.Length);
                    newBuffer[read] = (byte)nextByte;
                    buffer = newBuffer;
                    read++;
                }
            }
          
            byte[] ret = new byte[read];
            Array.Copy(buffer, ret, read);
            return ret;
        }

Voili voilou.
Je recupere tout type de format comme ca: csv, xls, zip etc.
:)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 108 internautes nous ont dit merci ce mois-ci

Commenter la réponse de renyone
Messages postés
23
Date d'inscription
mercredi 16 juillet 2003
Statut
Membre
Dernière intervention
28 mars 2013
0
Merci
Salut,

Pour le csv, je ne pense pas qu'il y ait une stream qui le lit directement. Il faut un peu coder . Tu lis ton csv comme un txt, et tu utilises la fonction Split() pour lire chaque "cellules" ( on utilisant le séparateur tab pour ce format, il me semble ).

Pour lire le xls, il faut que tu utilises la librairie Microsoft Excel Object. Pour cela il faut installer [ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_vstcore/html/92948fcc-76c6-4b08-ba63-cab59dd60eb1.htm Office Primary Interop Assemblies]. Il se trouve que j'ai exactement le même problème que toi mais pour le .doc . Voici le lien du post. Merci de ne pas y poser des questions par rapport à ton post. Lis-le, suis-le ( pour Excel, bien sur ). Et repose-moi des questions dans ton post, j'y répondrai toujours car c en lien avec mon problème. J'ai déjà potassé ce problème de lecture xls depuis longtemps, ensemble on trouvera surement la solution. 
Commenter la réponse de thristam
Messages postés
23
Date d'inscription
mercredi 16 juillet 2003
Statut
Membre
Dernière intervention
28 mars 2013
0
Merci
Tu récupères les csv, xls en binaire, d'accord. Mais comment tu vas les utiliser ? A un moment donné, il faudra les convertir en texte ?
Commenter la réponse de thristam
Messages postés
71
Date d'inscription
vendredi 9 mars 2007
Statut
Membre
Dernière intervention
12 avril 2010
3
0
Merci
Je sais pas si j ai bien compris ce que tu voulais dire. Mais ce que je fais c'est:

recuperation du stream (qui encode tout type de fichier: xls, csv, zip etc.) ==> je recupere tous ses bytes byte[] bytetab ==> j'ecris ces bytes dans un fichier avec la bonne extension (filename a la bonne extension. Dans mon cas j'ai l'adresse du fichier sur le server. Je sais qu'elle se termine par csv, j'ajoute .csv à mon filename) ==> mon fichier "filename" contient toutes mes données au bon format.
Commenter la réponse de renyone

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.