15

_data 是附件数据的 byte[] 数组。

当我这样做时:

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

附件是空的。实际上 Outlook 显示文件大小,但它不正确。

好吧,我认为我的 _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));

那行得通。第一个有什么问题?

4

2 回答 2

38

使用第一种形式,您不会“倒带”流:

ms.Position = 0;

所以它试图从流的末尾读取,那里没有任何数据。

创建 MemoryStream 的一种更简单的方法是只使用构造函数:

var ms = new MemoryStream(_data);
mailMessage.Attachments.Add(new Attachment(ms, attachment.Name));
于 2010-09-14T16:11:46.270 回答
4

不要使用 GetBuffer。利用ms.ToArray().

于 2010-09-14T16:10:56.390 回答