0

Lorsque j'utilise StreamWriter.WriteLine, il ne semble rien écrire dans un MemoryStream.Essayer d'envoyer csv en tant que pièce jointe d'un courrier électronique en C#

- "données" est quelque chose qui est déjà rempli. C'est un objet [] qui inclut des objets avec Name, Date et PhoneNumber.

StreamWriter sw = new StreamWriter(new MemoryStream()); 
CustomerReport[] customers = (CustomerReport[])data; 
foreach (var d in customers) 
{ 
    sw.WriteLine($"{d.Name},{d.Date},{d.PhoneNumber}"); 
} 
Attachment attachment = new Attachment(sw.BaseStream, "CustomerReport.csv", "text/csv"); 

Cependant l'attachement csv est toujours un csv vide.

Mise à jour: Je l'ai compris. C'était en fait le MemoryStream(). Je mets juste mon MemoryStream() qui dans ce cas est sw.BaseStream.Postion = 0

Voici une version de travail:

StreamWriter sw = new StreamWriter(new MemoryStream()); 
CustomerReport[] customers = (CustomerReport[])data; 
foreach (var d in customers) 
{ 
    sw.WriteLine($"{d.Name},{d.Date},{d.PhoneNumber}"); 
    sw.Flush(); 
} 
sw.BaseStream.Position = 0; 
Attachment attachment = new Attachment(sw.BaseStream, "CustomerReport.csv", "text/csv"); 
+0

J'ai vérifié le StreamWriter sw et il ne avoir les caractères dans le tampon char que je veux écrire. Cependant, rien n'est écrit dans BaseStream. – clueless7788

+0

Probablement une faute de frappe dans la question, mais il y a une accolade fermante supplémentaire à la fin de l'appel WriteLine(), ce qui signifie que le code plus bas pourrait ne pas faire partie du bloc ou de la portée que vous pensez. –

+0

Merci. J'ai tapé le code dans la question. Je n'ai pas copié et collé. J'ai corrigé cette erreur. – clueless7788

Répondre

1

Essayez d'appeler Flush méthode après foreach:

sw.Flush(); 
+0

Cela n'a pas fonctionné. J'ai vérifié le StreamWriter sw et il a les caractères dans le tampon de char que je veux écrire. Cependant, rien n'est écrit dans BaseStream. – clueless7788

+0

@ clueless7788 pouvez-vous essayer de mettre AutoFlush à true: 'sw.AutoFlush = true;' avant foreach –

+0

J'ai essayé 'sw.AutoFlush = true;' et cela a fonctionné. Le tampon 'sw.BaseStream' contient des données mais ma pièce jointe est toujours vide. – clueless7788