可能的重复:
删除附件文件
我试图在发送以下代码发送后自动删除文件:
protected void btnSend_Click(object sender, EventArgs e)
{
// Inserting attachment to the email
using (Attachment data = new Attachment("C:\local\vCardGenerator.Website\" + "FirstName_LastName.vcf", MediaTypeNames.Application.Octet))
{
// add Send E-mail class
SendvCard smtp = new SendvCard();
// Calls method to class
smtp.MailvCard("anonymous@domain.com", "C:\local\vCardGenerator.Website" + "\" + "FirstName_LastName" + ".vcf");
}
// Status label + Delete file
lblStatus.Text = "vCard Send to:" + " " + txtMail.Text;
//Delete file after being send as an attachment with the mail
FileInfo DeleteFileInfo = new FileInfo("C:\local\vCardGenerator.Website" + "\" + "FirstName_LastName" + ".vcf");
if (DeleteFileInfo.Exists)
File.Delete("C:\local\vCardGenerator.Website" + "\" + "FirstName_LastName" + ".vcf");
在没有"自动删除"的情况下进行调试非常顺利,它甚至将电子邮件发送带有附件,但是当我发送附件时,我尝试删除附件时,我会收到以下错误弹出窗口:
该过程无法访问文件。(〜"路径"),因为它正在使用 另一个过程。
是否有人知道为什么会发生此错误?
我需要先处理文件吗?
愿意在需要时提供任何其他/更多信息。
预先感谢,
如果处理邮件消息,它将关闭其中的资源并解锁文件
SendvCard
不是.NET框架的一部分,所以我不能肯定地告诉您,但是,我会在内部猜测它会创建一个MailMessage
对象,该对象会锁定该对象依恋直到处置为止。另外,看起来您正在不必要地创建一个新的Attachment
对象,因为据我所知,它没有被使用。
您需要做的是在之前处置 smtp
对象您尝试删除附件,因此,如果SendvCard
实现IDisposable
,则代码可能看起来像:
using (var smtp = new SendvCard())
{
// Calls method to class
smtp.MailvCard("anonymous@domain.com", "C:\local\vCardGenerator.Website" + "\" + "FirstName_LastName" + ".vcf");
}
// Status label + Delete file
lblStatus.Text = "vCard Send to:" + " " + txtMail.Text;
//Delete file after being send as an attachment with the mail
FileInfo DeleteFileInfo = new FileInfo("C:\local\vCardGenerator.Website" + "\" + "FirstName_LastName" + ".vcf");
if (DeleteFileInfo.Exists)
File.Delete("C:\local\vCardGenerator.Website" + "\" + "FirstName_LastName" + ".vcf");
我使用了不需要文件开始的附件构造函数之一。我写信给记忆播,将其重新打扫,然后将其提供给附件。
之后,我收到了另一个错误,这将是一个新线程。
我感谢大家的帮助和答案,即使我不需要它们。