Fehler beim löschen und kopieren von Dateien

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von MichaHo.

    Fehler beim löschen und kopieren von Dateien

    Hey, ich arbeite gerade an einem Programm bei dem man Bilder mit vor und zurück Tasten ansehen kann. Das funktioniert soweit auch. Jetzt möchte ich aber auch Bilder löschen, das würde ja auch fast funktionieren. Ich möchte aber wenn ich das 2. von z.B. 4 Bildern lösche, die Bilder 3 und 4 um eine zahl umbenannt werden (also in 2 und 3). Leider bekomme ich immer folgende Fehlermeldung:




    IOException wurde nicht behandelt.


    Ein Ausnahmefehler des Typs "System.IO.IOException" ist in mscorlib.dll aufgetreten.

    Zusätzliche Informationen: Der Prozess kann nicht auf die Datei "C:\Users\***Verzeichnis***\Objekt Haus Plan 2.png" zugreifen, da sie von einem anderen Prozess verwendet wird.



    Ich verstehe schon was mir die Fehlermeldung sagt, nur weis ich nicht wie ich das sonst hinbekomme (# = die zeilen wo die Fehlermeldung auftritt)




    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class FormObjektplanDetails
    3. 'Plan Variable
    4. Dim PlanAktuell As String
    5. Private Sub ButObjektplanLoschen_Click(sender As Object, e As EventArgs) Handles ButObjektplanLoschen.Click
    6. Dim ApplicatonPath As String = Application.StartupPath
    7. Dim PlanAndern As String = PlanAktuell
    8. Dim PlanNrNeu As String
    9. If My.Computer.FileSystem.FileExists(ApplicatonPath & "\Dateien\Objekt " & TexBoxObjGebaudebezeichnung.Text & " Plan " & PlanAktuell & ".png") = True Then
    10. My.Computer.FileSystem.DeleteFile(ApplicatonPath & "\Dateien\Objekt " & TexBoxObjGebaudebezeichnung.Text & " Plan " & PlanAktuell & ".png") '#
    11. Do
    12. PlanAndern += 1
    13. If My.Computer.FileSystem.FileExists(ApplicatonPath & "\Dateien\Objekt " & TexBoxObjGebaudebezeichnung.Text & " Plan " & PlanAndern & ".png") = True Then
    14. PlanNrNeu = PlanAndern
    15. PlanNrNeu -= 1
    16. My.Computer.FileSystem.CopyFile(ApplicatonPath & "\Dateien\Objekt " & TexBoxObjGebaudebezeichnung.Text & " Plan " & PlanAndern & ".png", ApplicatonPath & "\Dateien\Objekt " & TexBoxObjGebaudebezeichnung.Text & " Plan " & PlanNrNeu & ".png") '#
    17. My.Computer.FileSystem.DeleteFile(ApplicatonPath & "\Dateien\Objekt " & TexBoxObjGebaudebezeichnung.Text & " Plan " & PlanAndern & ".png") '#
    18. End If
    19. Loop
    20. End If
    21. End Sub
    22. End Class



    Ich bin mir ziemlich sicher es gibt viel bessere Wege um das gleiche zu erreichen, wäre super wenn ihr mir einen zeigen könntet oder mir zumindest sagen könnt wie ich den Fehler aus meine Lösung bekomme. :D



    mfg

    PatVB schrieb:

    bessere Wege
    Fang an mit Option Strict On.
    Verwende den IO-Namespace:

    VB.NET-Quellcode

    1. If IO.File.Exists(path) Then

    Fasse den vorderen Teil des Pfadnamens ApplicatonPath & "\Dateien\Objekt " & TexBoxObjGebaudebezeichnung.Text & " Plan " in einer separaten String-Variable zusammen.
    Was macht

    VB.NET-Quellcode

    1. PlanAndern += 1
    2. ' ...
    3. PlanNrNeu = PlanAndern
    4. PlanNrNeu -= 1
    :?:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Problem hat sich gerade gelöst

    Ich hab mein Problem jetzt so gelöst:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class FormObjektplanDetails
    3. 'Plan Variable
    4. Dim PlanAktuell As String = "1"
    5. Dim GebaudeAktuell As String
    6. Private Sub ButObjektplanLoschen_Click(sender As Object, e As EventArgs) Handles ButObjektplanLoschen.Click
    7. FormObjektLoschen.Show()
    8. FormObjektLoschen.TexBoxObjLoschenPlanNr.Text = LabPlanNr.Text
    9. End Sub
    10. End Class





    VB.NET-Quellcode

    1. Public Class FormObjektLoschen
    2. Private Sub ButObjektplanLoschen_Click(sender As Object, e As EventArgs) Handles ButObjektplanLoschen.Click
    3. Dim GebaudeAktuell As String = FormObjektplanDetails.TexBoxObjGebaudebezeichnung.Text
    4. Dim ApplicatonPath As String = Application.StartupPath
    5. Dim PlanAnzahl As String = System.IO.File.ReadAllText(ApplicatonPath & "\Dateien\Objekt " & GebaudeAktuell & " PlanZahl.txt")
    6. Dim LoopNr As String
    7. Dim LoopNrNeu As String
    8. Dim loopstop As Boolean
    9. 'Bild prüfen und ändern
    10. If System.IO.File.Exists(ApplicatonPath & "\Dateien\Objekt " & GebaudeAktuell & " Plan " & TexBoxObjLoschenPlanNr.Text & ".png") = True Then
    11. If FormObjektplanDetails.PicBoxPlan.ImageLocation = ApplicatonPath & "\Dateien\Objekt " & GebaudeAktuell & " Plan 1.png" Then
    12. FormObjektplanDetails.PicBoxPlan.ImageLocation = ApplicatonPath & "\Dateien\Kein Plan.jpg"
    13. 'Löschen
    14. System.IO.File.Delete(ApplicatonPath & "\Dateien\Objekt " & GebaudeAktuell & " Plan " & TexBoxObjLoschenPlanNr.Text & ".png")
    15. FormObjektplanDetails.LabPlanNr.Text = "1"
    16. 'PlanAnzahl Datei ändern
    17. PlanAnzahl -= 1
    18. System.IO.File.WriteAllText(ApplicatonPath & "\Dateien\Objekt " & GebaudeAktuell & " PlanZahl.txt", PlanAnzahl)
    19. Else
    20. FormObjektplanDetails.PicBoxPlan.ImageLocation = ApplicatonPath & "\Dateien\Objekt " & GebaudeAktuell & " Plan 1.png"
    21. 'Löschen
    22. System.IO.File.Delete(ApplicatonPath & "\Dateien\Objekt " & GebaudeAktuell & " Plan " & TexBoxObjLoschenPlanNr.Text & ".png")
    23. FormObjektplanDetails.LabPlanNr.Text = "1"
    24. 'PlanAnzahl Datei ändern
    25. PlanAnzahl -= 1
    26. System.IO.File.WriteAllText(ApplicatonPath & "\Dateien\Objekt " & GebaudeAktuell & " PlanZahl.txt", PlanAnzahl)
    27. End If
    28. End If
    29. 'Dateien umbenennen
    30. LoopNr = TexBoxObjLoschenPlanNr.Text
    31. LoopNr += 1
    32. LoopNrNeu = TexBoxObjLoschenPlanNr.Text
    33. Do Until loopstop = True
    34. If System.IO.File.Exists(ApplicatonPath & "\Dateien\Objekt " & GebaudeAktuell & " Plan " & LoopNr & ".png") = True Then
    35. loopstop = False
    36. System.IO.File.Copy(ApplicatonPath & "\Dateien\Objekt " & GebaudeAktuell & " Plan " & LoopNr & ".png", ApplicatonPath & "\Dateien\Objekt " & GebaudeAktuell & " Plan " & LoopNrNeu & ".png")
    37. System.IO.File.Delete(ApplicatonPath & "\Dateien\Objekt " & GebaudeAktuell & " Plan " & LoopNr & ".png")
    38. LoopNr += 1
    39. LoopNrNeu += 1
    40. Else
    41. loopstop = True
    42. End If
    43. Loop
    44. Me.Close()
    45. End Sub
    46. End Class

    PatVB schrieb:

    so gelöst

    RodFromGermany schrieb:

    Fang an mit Option Strict On.
    Wohl kaum. X(
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also, ich bin auch absoluter Anfänger, aber selbst ich weis schon das ​Dim LoopNr as String Mist ist... Bei Option Strict On würde dir das auch angezeigt... Mit Nummern, oder Zahlen arbeitet man nicht, wenn sie asl String deklariert sind, das sind dann Texte! Arbeite da halt mit Integer, Double oder Single...
    "Hier könnte Ihre Werbung stehen..."