Удаление файлов приводит к ошибке (процесс не может получить доступ к файлу..)

В настоящее время я отлаживаю свой код, потому что он дает мне ошибку:

The process cannot access the file because it is being used by another process.

И я думаю, что ошибка возникает в этой строке кода

foreach (var filename in filenames)
{
    var file = Path.Combine(filePath, filename);
    mail.Attachments.Add(new Attachment(file));
}

// Send Mail
smtpServer.Send(mail);

DeleteFiles();

Я хочу удалить файлы в папке при отправке почты с использованием этого метода

private void DeleteFiles()
{
    string filePath = Server.MapPath("~/Content/attachments");
    Array.ForEach(Directory.GetFiles(filePath), System.IO.File.Delete);
}

Я читал о закрытии / утилизации? FileStream и т. Д., Но как я могу использовать это в своем коде? Заранее спасибо.

2 ответа

Решение

mail.dispose(); Вы должны утилизировать почту перед удалением файла. Это должно снять блокировку файла.

foreach (var filename in filenames)
{
    var file = Path.Combine(filePath, filename);
    mail.Attachments.Add(new Attachment(file));
}

// Send Mail
smtpServer.Send(mail);
mail.Dispose();
DeleteFiles();

https://msdn.microsoft.com/en-us/library/0w54a951(v=vs.110).aspx

using(FileStream stream = new FileStream("thepath"))
{
      //do stuff with the file
      stream .Close();
}

Теперь поток будет закрыт и утилизирован.

Другие вопросы по тегам