15

_dataは、添付ファイルデータのbyte[]配列です。

私がこれをしているとき:

 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));

そしてそれはうまくいきます。最初のものの何が問題になっていますか?

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 に答える