【发布时间】:2011-03-09 21:17:07
【问题描述】:
我使用以下代码将文件附加到电子邮件中。
msg = new MailMessage();
using (strMem = new MemoryStream((byte[])attDr["filedata"]))
{
using (strWriter = new StreamWriter(strMem))
{
strWriter.Flush(); strMem.Position = 0;
using (attachment = new Attachment(strMem, attDr["filename"].ToString()))
{
msg.Attachments.Add(attachment);
}
}
}
...
...
msg.Send(); //Error: System.ObjectDisposedException: Cannot access a closed Stream.
错误信息是://Error: System.ObjectDisposedException: Cannot access a closed Stream
我猜“USING”语句在退出块时会关闭流。但是为什么“Attacments.Add()”不制作自己的流副本呢?
【问题讨论】:
-
欢迎来到
StreamWriter的魔法世界。它总是关闭包裹的Stream。 .NET 框架中奇妙的设计怪癖之一 :-) -
这只是因为在使用块结束时它会处理对象附件。但是附件是由味精使用的。所以....
-
从未声明过
msg变量。MailMessage类也不包含任何Send()方法。