que tienen un número de archivos que se generan en una función definida como:Parece que el archivo se mantiene abierto después de ser enviado como un archivo adjunto por SmtpClient. ¿Cómo puedo eliminar el archivo?
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
Estos archivos se imprimen inmediatamente y los archivos se guardan automáticamente en un directorio; los archivos en sí mismos no son para el uso real de los usuarios del software. I marca el tiempo de los archivos para mantenerlos identificados de manera única con fines de auditoría.
He recibido el requerimiento de enviar algunos de estos archivos externamente a la empresa, y alguien se ha quejado de que los nombres de archivo actuales no son fáciles de usar.
tanto, he intentado copiar el archivo generado en un directorio temporal, con un nombre más sencillo, enviando un correo electrónico el archivo más amigable, a continuación, eliminarlo, dejando intacta mi pista de auditoría, así:
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
Esto arroja una System.IO.IOException
en la línea System.IO.File.Delete(friendlyFilePath)
porque el archivo todavía está en uso, después de haber sido enviado por correo electrónico.
He sacado el código de correo electrónico, lo que hace que la copia y la eliminación funcionen bien, por lo que aparentemente adjunta el archivo al correo electrónico que causa el problema.
También he intentado romper antes de la línea de eliminación, esperando cinco minutos, confirmando que se ha enviado el correo electrónico, y luego avanzando el código, pero todavía se lanza la misma excepción.
¿Alguien puede sugerir cómo resolver este problema?
¿Hay alguna posibilidad de que en esa región [gran cantidad de código] tenga una secuencia de algún tipo que no haya cerrado? –