可能重复:
delete attachment file
我试图在使用以下代码发送文件后自动删除文件:
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");
没有'自动删除'的调试运行非常流畅,它甚至会发送带有附件的电子邮件,但是当我尝试在发送后删除附件时,我会收到以下错误弹出:
该进程无法访问该文件。 (〜\“Path”)因为它被使用了 另一个过程。
有没有人知道为什么会出现这种错误? 我需要先处理文件吗?
如有需要,愿意提供任何其他/更多信息。
在此先感谢,
答案 0 :(得分:4)
如果您处理邮件消息,它将关闭其中的资源并解锁文件
答案 1 :(得分:1)
SendvCard
不是.NET Framework的一部分,所以我无法肯定地告诉你,但是,我会在内部创建一个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");
答案 2 :(得分:0)
我使用了一个不需要文件开头的Attachment构造函数。 我写了一个MemoryStream,重新启动它,然后将它提供给附件。
之后我收到了另一个错误,这将是一个新线程。
我感谢大家的帮助和答案,即使我不需要他们。