我在ASP.NET应用程序中附加了一个文件。问题是该过程不会放弃该文件。如何在方法中关闭文件,以便我可以在我的程序中再次使用它?
Attachment data = new Attachment(@"\\WIN-UWPWZ7Z3RKX\wwwroot\katipro\skus.txt");
m.Attachments.Add(data);
SmtpClient s = new SmtpClient("smtp.gmail.com", 587);
s.Send(m);
在我调用该方法后,它不允许我再次写入该文件而没有错误。
答案 0 :(得分:7)
System.Net.Mail.Attachment
实施IDisposable
。你需要处理你的附件。
using(Attachment data = new Attachment(@"\\WIN-UWPWZ7Z3RKX\wwwroot\katipro\skus.txt"))
{
m.Attachments.Add(data);
SmtpClient s = new SmtpClient("smtp.gmail.com", 587);
s.Send(m);
}
同样,如果您使用的是.NET Framework 4.0; SmtpClient
也是一次性的。如果您使用的是4.0 Framework,请将其丢弃。在使用完IDisposable接口时,你应始终处理实现IDisposable接口的东西。
答案 1 :(得分:2)
您需要处置用于它们的所有IDisposable
个对象,以释放非托管资源,例如文件句柄。
using(MailMessage m = ...)
{
...
using (Attachment data = ...)
{
...
using (SmtpClient s = ...)
{
...
}
}
}
答案 2 :(得分:2)
处理MailMessage时,无需处置附件。如果查看内部实现,MailMessage已经自行处理了附件。
// MailMessage.cs
protected virtual void Dispose(bool disposing)
{
if (disposing && !disposed)
{
disposed = true;
if(views != null){
views.Dispose();
}
if(attachments != null){
attachments.Dispose();
}
if(bodyView != null){
bodyView.Dispose();
}
}
}
答案 3 :(得分:1)
Attachment
实施IDisposable
;在发送消息后,您需要处置实例以释放其资源。
...
s.Send(m)
data.Dispose();