Datei verschieben, nachdem die per Email versendet wurde

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Pawny.

    Datei verschieben, nachdem die per Email versendet wurde

    Hallo zusammen,

    mein Problem ist, dass ich eine Email mit Anhang versende und danach den Anhang in einen anderen Ordner verschieben möchte. Als Fehlermeldung bekomme ich, dass die Datei noch von einem anderen Prozess geöffnet sei.

    VB.NET-Quellcode

    1. Imports System.Net.Mail
    2. Imports System.IO
    3. Public Class Form1
    4. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    5. Dim eMail As New MailMessage("xxx@xxx.de", "xxx@xxx.de") 'Sender & Empfnger
    6. Dim client As New SmtpClient
    7. Dim anmeldung As New Net.NetworkCredential
    8. Dim anhang As String
    9. Dim geklappt As Boolean
    10. Dim Start As String
    11. Dim Ziel As StringDim uhrzeit As TimeSpan
    12. Dim count As Int16
    13. uhrzeit = Now.TimeOfDay
    14. geklappt = False
    15. Try
    16. For Each Files In My.Computer.FileSystem.GetFiles("X:\Start\")
    17. anhang = My.Computer.FileSystem.GetName(Files)
    18. anmeldung.UserName = xxx@xxx.xx
    19. anmeldung.Password = "xxx"
    20. With eMail
    21. .Subject = "Betreff"
    22. .IsBodyHtml = False
    23. .BodyEncoding = System.Text.Encoding.Default
    24. .Body = "Datei: " & anhang & " // " & uhrzeit.ToString
    25. .Priority = MailPriority.Normal
    26. .Attachments.Add(New Attachment("X:\Start\" & anhang))
    27. End With
    28. client.Host = "xxx.xxx.xx"
    29. client.Credentials = anmeldung
    30. client.Send(eMail)Start = "X:\Start\" & anhangZiel = "X:\Ziel\" & anhang
    31. 'mein verzweifelter versuch, das verschieben hinnauszuzgern da ich evtl da den fehler zu finden hoffte
    32. count = 0
    33. Do While geklappt = False
    34. Try
    35. My.Computer.FileSystem.MoveFile(Start, Ziel)
    36. geklappt = True
    37. Catch ex As Exception
    38. geklappt = False
    39. count = count + 1
    40. Label1.Text = count
    41. If count = 1500 Then
    42. geklappt = True
    43. End If
    44. End Try
    45. Loop
    46. Next
    47. Catch ex As Exception
    48. Label2.Text = ex.ToString()
    49. End Try
    50. End Sub
    51. End Class



    (Ich hab übrigens 0 Plan warum der den Code vllt nicht eingerückt anzeigt. Der Code ist aus Visual Studio rauskopiert und hier die Vorschau macht keine Einrückungen)


    Muss ich die Datei irgendwie nach dem versenden wieder Freigeben oder dauert das noch länger als der 1500 mal die Schleife durchläuft?



    Hoffe mir kann jemand helfen oder ein Stichwort für die weitere Suche geben.



    MfG

    Pawny

    edit: mal hoffentlich nun leserlich gemacht

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Pawny“ ()

    Danke, damit ist die Konstruktion mit der Schleife unten hinfällig.

    Leider hilft mir das bei meinem eigentlichen Problem nicht weiter.
    Mal die Fehlermeldung:
    System.IO.IOException: Der Prozess kann nicht auf die Datei zugreifen, da sie bereits von einem anderen Prozess verwendet wird.

    MfG
    Pawny
    Hallo Pawny,

    Leider hilft mir das bei meinem eigentlichen Problem nicht weiter.

    das mag sein !

    Mein erster Post beschäftigte sich auch nur mit WarteCode.

    Wo definierst du Client ?
    Formatier deinen Code mal ein wenig - so ist er nur schwer lesbar.

    Gruss

    mikeb69
    Morgen,

    Ich habe den Text mal hoffentlich in eine lesbare Form gebracht. Dieses Forum scheint mit Firefox deutlich besser klar zu kommen als mit dem IE.

    Das versenden der Emails mit den Dateien als Anhang funktioniert ja auch einwandfrei, lediglich das verschieben der jeweiligen Datei will einfach nicht.

    Könnte es in dem Ordner Rechteprobleme sein? Aber ich kann die Dateien selber löschen und wenn ich das Programm unter meinem Benutzer starte sollte es die Rechte auch haben oder?

    MfG
    Pawny
    Hallo Pawny,

    für nach dem Senden ein

    VB.NET-Quellcode

    1. Client.Dispose

    aus.
    Danach eine kleine Wartezeit und die Datei sollte sich löschen lassen.

    MSDN schrieb:

    Sendet eine QUIT-Meldung an den SMTP-Server, beendet die TCP-Verbindung ordnungsgemäß und gibt alle Ressourcen frei, die von der aktuellen Instanz der SmtpClient-Klasse verwendet werden.


    Gruss

    mikeb69
    Ich habe da ein kleinen Konflickt.
    Mein Visual Studio gibt mir .Dispose garnicht über Intellisense (oder wie sich das schimpft) an und wenn ich es eintrage wird es unterkringelt mit der Meldung:
    "Dispose" ist kein Member von "System.Net.Mail.SmtpClient".
    Hier beisst sich irgendwie das MSDN und mein Visual Studio. Wo könnte ich noch einen Denkfehler haben?

    Bis hier hin schonmal Danke mikeb69

    Gruss