Ich habe eine Reihe von Dateien, die in einer Funktion erzeugt werden, die wie folgt definiert ist:
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
Diese Dateien werden sofort gedruckt, und die Dateien werden automatisch in einem Verzeichnis gespeichert; die Dateien selbst sind nicht zur Verwendung durch die eigentlichen Softwarebenutzer bestimmt. Ich versehe die Dateien mit einem Zeitstempel, damit sie zu Prüfzwecken eindeutig identifiziert werden können.
Ich habe nun die Anforderung erhalten, einige dieser Dateien per E-Mail an das Unternehmen zu senden, und jemand hat sich beschwert, dass die derzeitigen Dateinamen nicht benutzerfreundlich sind.
Ich habe also versucht, die erzeugte Datei in ein temporäres Verzeichnis mit einem freundlicheren Namen zu kopieren, die freundlichere Datei per E-Mail zu versenden und sie dann zu löschen, wobei mein Prüfpfad intakt blieb, etwa so:
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
Dies führt zu einer System.IO.IOException
auf der Linie System.IO.File.Delete(friendlyFilePath)
weil die Datei nach dem Versand per E-Mail noch in Gebrauch ist.
Ich habe den E-Mail-Code herausgenommen, so dass das Kopieren und Löschen problemlos funktioniert.
Ich habe auch versucht, vor der Löschzeile einen Haltepunkt zu setzen, fünf Minuten zu warten, zu bestätigen, dass die E-Mail gesendet wurde, und dann den Code fortzusetzen, aber die gleiche Ausnahme wird immer noch ausgelöst.
Kann jemand einen Vorschlag machen, wie man dieses Problem lösen kann?
0 Stimmen
Besteht die Möglichkeit, dass Sie in der Region [Unmengen von Code] eine Art Stream haben, den Sie nicht geschlossen haben?