Файл остается открытым после того, как SmtpClient отправил его как вложение. Как я могу удалить файл?

У меня есть несколько файлов, которые генерируются функцией, определенной как:

Public Function GeneratePDF(exportFileName As String) As String
    Dim GeneratePath As String = FileSystem.CombinePath(standardDirectory, exportFileName  & DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss") & ".pdf")
    If GenerateFile(GeneratePath) Then
        Return GeneratePath
    End If
    Return String.Empty
End Function

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

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

Итак, я попытался скопировать сгенерированный файл во временную директорию с более удобным именем, отправить более удобный файл по электронной почте, а затем удалить его, оставив свой контрольный журнал нетронутым, вот так:

Public Function GeneratePDF(exportFileName As String) As String
    Dim GeneratePath As String = FileSystem.CombinePath(standardDirectory, exportFileName  & DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss") & ".pdf")
    If GenerateFile(GeneratePath) Then

        Dim friendlyFilePath As String = FileSystem.CombinePath(standardDirectory, GetFriendlyFileName(GeneratePath))
        System.IO.File.Copy(GeneratePath, friendlyFilePath)

        Dim mailMsg As New System.Net.Mail.MailMessage
        Dim smtp As New System.Net.Mail.SmtpClient
        [Vast amount of code, which attaches friendlyFilePath to the email, then sends it]

        System.IO.File.Delete(friendlyFilePath)

        Return GeneratePath
    End If
    Return String.Empty
End Function

Это вызывает систему . IO.IOException в строке System.IO.File.Delete (friendlyFilePath) , потому что файл все еще используется после того, как он был отправлен по электронной почте.

Я вынул код электронной почты, что позволяет нормально работать с копированием и удалением, поэтому очевидно, что файл прикрепляется к электронному письму, что вызывает проблему.

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

Кто-нибудь может подсказать, как решить эту проблему?

7
задан Adrian Iftode 8 February 2012 в 15:31
поделиться