0

当我使用StreamWriter.WriteLine它似乎没有写任何东西给MemoryStream试图发送csv作为C#中的电子邮件附件#

- “数据”是以前填充的内容。它是一个包含具有Name,Date和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"); 

然而csv附件始终是一个空csv

更新: 我明白了。它实际上是MemoryStream()。 我只是把我的MemoryStream()在这种情况下是sw.BaseStream.Postion = 0

下面是一个工作版本:

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

我检查了StreamWriter的SW和它在我想写的字符缓冲区中有字符。但是,没有任何内容写入BaseStream。 – clueless7788

+0

问题中可能有拼写错误,但在WriteLine()调用结束时还有一个额外的大括号,这意味着代码进一步下移可能不是您认为它的块或范围的一部分。 –

+0

谢谢。我在问题中输入了代码。我没有复制和粘贴。我纠正了这个错误。 – clueless7788

回答

1

尝试调用Flush方法之后foreach

sw.Flush(); 
+0

这没有奏效。我检查了StreamWriter sw,它确实在我想写的字符缓冲区中有字符。但是,没有任何内容写入BaseStream。 – clueless7788

+0

@ clueless7788你可以尝试将AutoFlush设置为true:'sw.AutoFlush = true;'在foreach之前 –

+0

我试过'sw.AutoFlush = true;'它工作正常。 'sw.BaseStream'缓冲区中有数据,但我的附件仍然是空的。 – clueless7788