Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

after email deleting attachment file, error "The process cannot access the file because it is being used by another process."

Tags:

c#

.net

asp.net

I am doing an email form. Email has attachments and after attaching files email is sent. Next there is requirement to delete file from server. When I tried to get the file it gave me the subject error. I am even calling GC.Collect() before deleting the file but error is still there. My code for deleting file is:

 private void DeleteFiles(DataTable dt)
{
    GC.Collect();
    String[] sAttachments = new String[dt.Rows.Count];
    try
    {

        sAttachments = new String[dt.Rows.Count];
        for (Int32 J = 0; J < dt.Rows.Count; J++)
        {
            sAttachments[J] = dt.Rows[J]["AttachmentExt"].ToString().Trim();
            string workDir = Server.MapPath(".") + @"\upload\";
            if (File.Exists(workDir + sAttachments[J]))
                File.Delete(workDir + sAttachments[J]);                
        }
    }
    catch (Exception ex)
    {

    }

For attaching file to email my code is:

 oMess.Subject = sSubject; 
        string workDir = System.Web.HttpContext.Current.Server.MapPath(".") + @"\upload\";
        if (Attachments != null)
        {
            for (Int32 I = 0; I < Attachments.Length; I++)
            {
                oatt = new Attachment(workDir+ sAttachments[I]);
                oMess.Attachments.Add(oatt);
            }
        }
        oMess.IsBodyHtml = IsHtml;
        oMess.Body = sBody;
       SendMessageGmail(oMess);

Edit: My mail sending code is:

 private void SendMessageGmail(MailMessage message)        
    {
        SmtpClient client = new SmtpClient("smtp.gmail.com");
        client.EnableSsl = true;
        client.UseDefaultCredentials = false;
        NetworkCredential loginInfo = new NetworkCredential("myid", "mypassword");
        client.Credentials = loginInfo;
        client.Port = 587;
        client.Send(message);
    }

Plz guide and help. thanks

like image 430
user576510 Avatar asked Apr 28 '11 13:04

user576510


People also ask

How to solve the process cannot access the file because it is being used by another process?

Press Ctrl + Alt + Delete, then click Task Manager. Ensure you're on the Processes tab. Locate and right-click SidekickTrayWPF, then select End Process. If a warning window opens to ask if you want to end the process, click End Process again to confirm.

How do you copy a file while it is being used by another process?

To create a copy of a file that is read- and/or write-locked by another process on Windows, the simplest (and probably only) solution is to use the Volume Shadow Copy Service (VSS). The Volume Shadow Copy Service is complex and difficult to call from managed code.


1 Answers

Use this one. It worked for me

client.Send(oMess);
oMess.Attachments.Dispose();

I tried this one but it didn`t work for me

client.Send(oMess);
oMess.Dispose();
like image 76
wajira000 Avatar answered Oct 17 '22 09:10

wajira000