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

相關問題