Hi all
In the following Sub I'm sending an Attachment when the email has been sent I would like to delete the attachment but I get an system.IO.IOException Error. the file I'm trying to delete is being used by another process.
How can I detect if the process has finished.

Happy New Year to everyone

Private Sub SendMail()
            Dim cfiAttach As Net.Mail.Attachment
            Dim Attacmentfile As String = AttDir & fileName & ".pdf"
            Dim SmtpServer As New SmtpClient()
            Dim mail As New MailMessage()
            SmtpServer.Credentials = New Net.NetworkCredential(diaSettings.txtMail_User.Text, diaSettings.txtMail_Pass.Text)
            SmtpServer.Port = smtpPrt
            SmtpServer.Host = SmtpHst
            mail = New MailMessage()
            mail.From = New MailAddress(Mail_user)
            ' mail.Bcc.Add(BBC_MailTO)
            mail.Subject = fileName
            mail.Body = ""
            cfiAttach = New Attachment(Attacmentfile)
            If File.Exists(Attacmentfile) Then
                cfiAttach = New Attachment(Attacmentfile)
                MsgBox("Attachment Not Found")
            End If
           [U]System.IO.File.Delete(AttDir & fileName & ".pdf")[/U] 
        Catch ex As Exception
        End Try
    End Sub

Recommended Answers

You will need to call Dispose() on any attachments.
Here is an example (in C#), but you can easily translate the Dispose().

[Translated (uses Linq)]

mail.Attachments.ToList().ForEach(Sub(a) a.Dispose())
Jump to Post

You called the dispose BEFORE attempting the delete?
Also, if you Catch the exception, what is the exception message (the actual error)?

Jump to Post

All 6 Replies

Thanks thines01 for your reply
I added the line of code you specified right after the email was sent but I still get
the system.IO.IOException.
I also tried mail.Attachments.Dispose() and no luck.

You called the dispose BEFORE attempting the delete?
Also, if you Catch the exception, what is the exception message (the actual error)?

Yes the Dispose was called before attempting the delete.
This is the actual error:
System.IO.IOException: The process cannot access the file 'C:\CFI\33Glasgow.pdf'
because it is being use by another process.
at System.IO._error.winIOErroe(Int32 errorCode.String maybeFullPath)
at System.IO.File.Delete(String Path)
at CFI.Cfi_Report.SendMail() in C:\Users\Admin\Documents\Visual Studio 2010\CFI\Cfi_Report.vb:Line106

The next thing I would check is to make sure the .pdf is not open anywhere else and see if pausing for 10 seconds before the actual delete will give the system time to release the resource.

Also, did you notice you're calling New Attachment(Attacmentfile) twice?

Thanks you solved it.
Removing the First call for New Attachment(Attacmentfile)did the trick.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of 1.20 million developers, IT pros, digital marketers, and technology enthusiasts learning and sharing knowledge.