1

可能重复:
删除附件文件


我正在尝试使用以下代码发送文件后自动删除文件:

        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") 因为它正被另一个进程使用。

有没有人知道为什么会发生这个错误?
我需要先 Dispose 文件吗?

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

提前致谢,

4

3 回答 3

4

如果您处理邮件消息,它将关闭其中的资源并解锁文件

于 2012-11-02T12:42:35.147 回答
1

SendvCard不是 .NET 框架的一部分,所以我不能肯定地告诉你,但是,我会冒险猜测它在内部创建了一个MailMessage对象,该对象将锁定附件直到它被释放。此外,您似乎在不必要地创建一个新Attachment对象,因为据我所知,它没有被使用。

您需要做的是在尝试删除附件之前smtp处理您的对象,因此如果实现您的代码可能类似于:SendvCardIDisposable

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");
于 2012-11-02T12:45:42.677 回答
0

我使用了一个不需要文件开始的附件构造函数。我写了一个 MemoryStream,倒带它,然后将它提供给附件。

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

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

于 2012-11-02T13:39:36.447 回答