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

renyone 71 Messages postés vendredi 9 mars 2007Date d'inscription 12 avril 2010 Dernière intervention - 27 janv. 2009 à 15:05 - Dernière réponse : renyone 71 Messages postés vendredi 9 mars 2007Date d'inscription 12 avril 2010 Dernière intervention
- 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
renyone 71 Messages postés vendredi 9 mars 2007Date d'inscription 12 avril 2010 Dernière intervention - 28 janv. 2009 à 15:30
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.
:)

Merci renyone 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de renyone
thristam 23 Messages postés mercredi 16 juillet 2003Date d'inscription 28 mars 2013 Dernière intervention - 27 janv. 2009 à 17:26
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
thristam 23 Messages postés mercredi 16 juillet 2003Date d'inscription 28 mars 2013 Dernière intervention - 28 janv. 2009 à 16:52
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
renyone 71 Messages postés vendredi 9 mars 2007Date d'inscription 12 avril 2010 Dernière intervention - 29 janv. 2009 à 11:26
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.