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