У меня есть ряд файлов, которые создаются в функции, определенной как:
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
Это выдает System.IO.IOException
в строке System.IO.File.Delete(friendlyFilePath)
, потому что файл все еще используется, после того, как он был отправлен по электронной почте.
Я удалил код электронной почты, который делает копирование и удаление работающимихорошо, так что он, очевидно, прикрепляет файл к электронному письму, что вызывает проблему.
Я также попытался установить точку останова перед строкой удаления, подождав пять минут, подтвердив, что электронное письмо было отправлено, затем продвигая код, ноПо-прежнему выдается то же исключение.
Кто-нибудь может подсказать, как решить эту проблему?