Mam liczbę plików, które są generowane w zależności zdefiniowane jako:Plik wydaje się być otwarty po wysłaniu jako załącznik przez SmtpClient. Jak mogę usunąć plik?
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
Pliki te są natychmiast drukowane i pliki są automatycznie zapisywane w katalogu; same pliki nie są przeznaczone do użytku przez rzeczywistych użytkowników oprogramowania. Mam znacznik czasu plików, aby zachować je w unikalny sposób do celów audytu.
Otrzymałem już wymaganie, aby wysłać niektóre z tych plików na zewnątrz firmy, a ktoś narzekał, że obecne nazwy plików nie są przyjazne dla użytkownika.
Tak, próbowałem kopiowanie wygenerowany plik do katalogu temp, z przyjazną nazwą, wysyłając do przyjaznego plik, a następnie usuwając go, pozostawiając moją ścieżkę audytu w stanie nienaruszonym, tak:
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
To rzuca System.IO.IOException
na linii System.IO.File.Delete(friendlyFilePath)
, ponieważ plik jest nadal używany, po wysłaniu go pocztą e-mail.
Wyjęłam kod e-mail, który powoduje, że praca kopiowania i usuwania jest dobra, więc najwyraźniej załącza plik do wiadomości e-mail, która powoduje problem.
Próbowałem także breakpointing przed linią usuwania, czekając pięć minut, potwierdzając wysłanie e-maila, a następnie przesuwając kod, ale ten sam wyjątek jest nadal zgłaszany.
Czy ktoś może sugerować, jak rozwiązać ten problem?
Czy istnieje szansa, że w tym regionie [Wielkie ilości kodu] masz jakiś strumień, którego nie zamknąłeś? –