2013-03-21 8 views
0

Я создал приложение, которое генерирует файлы excel из информации в базе данных. Эти файлы сохраняются на моем жестком диске в папке.Файл используется другим исключением процесса. C#

После этого я прикрепляю файлы и отправляю их по почте. Когда я создаю другую партию файлов, я удаляю старые файлы, а затем создаю новые.

Моя проблема в том, что я сгенерировал одну партию файлов, а затем отправил их, и я хочу сгенерировать другую партию. Я не могу удалить один из старых файлов, потому что метод рассылки все еще держится на одном из превосходных файлы.

Вот мой код:

public void SendMailedFilesDKLol() { 
    string[] sentFiles=Directory.GetFiles(some_Folder); 

    if(sentFiles.Count()>0) { 
     System.Net.Mail.SmtpClient client=new System.Net.Mail.SmtpClient("ares"); 
     System.Net.Mail.MailMessage msg=new System.Net.Mail.MailMessage(); 

     msg.From=new MailAddress("[email protected]"); 
     msg.To.Add(new MailAddress("[email protected]")); 
     msg.Subject="IBM PUDO"; 

     msg.Body= 
      sentFiles.Count()+" attached file(s) has been sent to the customer(s) in question "; 

     msg.IsBodyHtml=true; 

     foreach(string file in sentFiles) { 
      Attachment attachment=new Attachment(file); 
      msg.Attachments.Add(attachment); 
     } 

     client.Send(msg); 
    } 
} 

Я попытался расположить элемент клиента, но это не помогло.

Может ли кто-нибудь помочь мне с этим?

+0

Вы уверены, что это ваш почтовый код, а не процесс Excel, который держит ваши документы? – LaGrandMere

+0

Да, я, потому что, когда я прокомментирую метод отправки почты, я могу регенерировать файлы, как я хочу – Lahib

ответ

3

Оба System.Net.Mail.MailMessage & System.Net.Mail.SmtpClient являются IDisposable классы. Вы можете попробовать следующее:

using (System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient("ares")) 
    { 
     using (System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage()) 
     { 
      msg.From = new MailAddress("[email protected]"); 
      msg.To.Add(new MailAddress("[email protected]")); 
      msg.Subject = "IBM PUDO"; 
      msg.Body = sentFiles.Count() + " attached file(s) has been sent to the customer(s) in question "; 
      msg.IsBodyHtml = true; 
      foreach (string file in sentFiles) 
      { 
       Attachment attachment = new Attachment(file); 
       msg.Attachments.Add(attachment); 
      } 

      client.Send(msg); 
     } 
    } 
0

Похоже, что вы не можете закрывать поток файлов при создании файлов excel, иначе вы сможете их открыть в Excel при попытке отправить их по электронной почте.

Пожалуйста, можете ли вы показать свой код для генерации файлов excel.

0

Вам необходимо утилизировать объекты Attachment. Пример использования LINQ:

public void SendMailedFilesDKLol() { 
    string[] sentFiles=Directory.GetFiles(some_Folder); 

    if(sentFiles.Count()>0) { 
     System.Net.Mail.SmtpClient client=new System.Net.Mail.SmtpClient("ares"); 
     System.Net.Mail.MailMessage msg=new System.Net.Mail.MailMessage(); 

     msg.From=new MailAddress("[email protected]"); 
     msg.To.Add(new MailAddress("[email protected]")); 
     msg.Subject="IBM PUDO"; 

     msg.Body= 
      sentFiles.Count()+" attached file(s) has been sent to the customer(s) in question "; 

     msg.IsBodyHtml=true; 

     var attachments = sentFiles.Select(f => new Attachment(f)).ToList(); 

     attachments.ForEach(a => msg.Attachments.Add(a)); 

     client.Send(msg); 

     attachments.ForEach(a => a.Dispose()); 
    } 
}