发送后删除附件文件

时间:2012-11-02 12:25:15

标签: c# asp.net email smtp email-attachments

  

可能重复:
  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”)因为它被使用了   另一个过程。

有没有人知道为什么会出现这种错误? 我需要先处理文件吗?

如有需要,愿意提供任何其他/更多信息。

在此先感谢,

3 个答案:

答案 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,重新启动它,然后将它提供给附件。

之后我收到了另一个错误,这将是一个新线程。

我感谢大家的帮助和答案,即使我不需要他们。