2010-09-14 72 views
13

_data是附件數據的byte []數組。來自MemoryStream的電子郵件附件爲空

當我這樣做:

var ms = new MemoryStream(_data.Length); 
ms.Write(_data,0,_data.Length); 
mailMessage.Attachments.Add(new Attachment(ms, attachment.Name)); 

附件自帶空。其實前景顯示的文件大小,但它是不正確的。

嗯,我認爲我的_data有問題。然後,我決定嘗試這種方法:

var ms = new MemoryStream(_data.Length); 
ms.Write(_data,0,_data.Length); 
fs = new FileStream(@"c:\Temp\"+attachment.Name,FileMode.CreateNew); 
fs.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length); 
fs.Flush(); 
fs.Close(); 
mailMessage.Attachments.Add(new Attachment(@"c:\Temp\" + attachment.Name)); 

這工作。第一個有什麼問題?

回答

34

隨着第一種形式,你不能「倒帶」流:

ms.Position = 0; 

於是有人試圖從年底流,那裏沒有任何數據的閱讀。

創建的MemoryStream的簡單的方法是隻使用雖然構造:第一部分

var ms = new MemoryStream(_data); 
mailMessage.Attachments.Add(new Attachment(ms, attachment.Name)); 
+0

這不是幫助,我已經試過 – Agzam 2010-09-14 16:13:59

+0

@IKE:請顯示您嘗試過的代碼。 – 2010-09-14 16:14:40

+2

哦..等等......其實就是這樣......我確信我之前曾嘗試過,而且沒有奏效。可能我已經搞砸了其他東西... – Agzam 2010-09-14 16:28:29

4

請勿使用GetBuffer。使用ms.ToArray().

+0

問題不是第二 – Agzam 2010-09-14 16:13:24

+1

@Ike:Aliostad是指出你的第二個片段仍然是不是真的正確 - 它可能有問題。 – 2010-09-14 16:16:25