Ho un certo numero di file che vengono generati in una funzione definita come:Il file sembra essere tenuto aperto dopo essere stato inviato come allegato da SmtpClient. Come posso cancellare il file?
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
Questi file vengono immediatamente stampate ed i file vengono automaticamente salvati in una directory; i file stessi non sono utilizzati dagli utenti effettivi del software. Timestamp i file per mantenerli identificati in modo univoco a fini di controllo.
Ora ho ricevuto l'obbligo di inviare alcuni di questi file esternamente all'azienda e qualcuno si è lamentato del fatto che i nomi file correnti non siano di facile utilizzo.
Così, ho provato a copiare il file generato in una directory temporanea, con un nome più amichevole, e-mail il file più amichevole, quindi eliminarlo, lasciando intatta la mia pista di controllo, in questo modo:
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
Questo getta una System.IO.IOException
sulla riga System.IO.File.Delete(friendlyFilePath)
perché il file è ancora in uso, dopo che è stato inviato per e-mail.
Ho eliminato il codice e-mail, il che rende la copia e l'eliminazione funzionanti, quindi è apparentemente allegando il file all'e-mail che causa il problema.
Ho anche provato il breakpointing prima della riga di eliminazione, aspettando cinque minuti, confermando che l'e-mail è stata inviata, quindi facendo avanzare il codice, ma la stessa eccezione è ancora generata.
Qualcuno può suggerire come risolvere questo problema?
Qualche possibilità che nella regione [Vasta quantità di codice] tu abbia un flusso di qualche tipo che non hai chiuso? –