IO Exception wurde nicht behandelt

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    IO Exception wurde nicht behandelt

    Hallo an alle VB.NET-ler,

    für dieses Thema musste ich mich doch registrieren, da ich keine Antwort auf mein Problem finden kann. :/
    Nun hoffe ich hier auf Hilfe!

    Ich versuche über ein SaveFileDialog den Inhalt von Textboxen in eine Datei zu speichern.
    Nun beim Ausführen des unten aufgeführten Quellcodes bekomme ich 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 "..." zugreifen, da sie von einem anderen Prozess verwendet wird.


    VB.NET-Quellcode

    1. Private Sub DateiSpeichernToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DateiSpeichernToolStripMenuItem.Click
    2. 'Speichert die aktuelle Fahrerliste
    3. Dim Fahrer_Gefunden As Integer = 0
    4. Dim Fahrerdatei As IO.Stream
    5. Dim saveFileDialog1 As New SaveFileDialog()
    6. saveFileDialog1.Filter = "ini files (*.ini)|*.ini"
    7. saveFileDialog1.FilterIndex = 1
    8. saveFileDialog1.RestoreDirectory = True
    9. saveFileDialog1.FileName = "Fahrerliste"
    10. saveFileDialog1.Title = "Speichere Fahrerliste"
    11. For Suche = 1 To 18
    12. If DirectCast(Meisterschaftsplatzierungen.Controls("Platz" & Suche), TextBox).Text > "" Then
    13. Fahrer_Gefunden = 1
    14. End If
    15. Next Suche
    16. If Fahrer_Gefunden = 1 Then
    17. If saveFileDialog1.ShowDialog() = DialogResult.OK Then
    18. Fahrerdatei = saveFileDialog1.OpenFile()
    19. If (Fahrerdatei IsNot Nothing) Then
    20. For Schreiben = 1 To 18
    21. If DirectCast(Meisterschaftsplatzierungen.Controls("Platz" & Schreiben), TextBox).Text > "" Then
    22. System.IO.File.WriteAllText(saveFileDialog1.FileName, Platz1.Text) "<<<<<<-------- HIER TAUCHT DER FEHLER AUF"
    23. End If
    24. Next Schreiben
    25. Fahrerdatei.Close()
    26. End If
    27. ElseIf DialogResult.Cancel Then
    28. MessageBox.Show("Datei wurde nicht gespeichert!", "Speichern abgebrochen", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    29. End If
    30. ElseIf Gefunden = 0 Then
    31. MessageBox.Show("Datei kann nicht gespeichert werden!" _
    32. & vbNewLine & "Es wurde/n kein/e Fahrer eingetragen!", "Keine Fahrernamen vorhanden", MessageBoxButtons.OK, MessageBoxIcon.Error)
    33. End If
    34. End Sub


    Wie kann ich das Problem lösen?
    War auf einigen Seiten, habe viel versucht und doch immer das Gleiche.

    Vielen Dank der Rückmeldungen im Voraus ^^ :D ^^
    Das liegt daran das Fahrerdatei noch auf die Datei zugreift sobald du schreibst.

    Entweder du machst es so:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim sw As StreamWriter = New StreamWriter(Fahrerdatei)
    2. sw.WriteLine(Platz1.Text)
    3. sw.Close()


    oder du schließt vorher Fahrerdatei mit Fahrerdatei.Close() bevor du in die Datei schreibst.
    KaskadekingDE on GitHub :)
    Bitte keine Fragen über Programmierung per PN! Dafür ist das Forum hier.

    Who cares? ¯\_(ツ)_/¯
    Fröhliche Weihnachten und Willkommen im Forum. :thumbup:

    Ar_oN schrieb:

    da sie von einem anderen Prozess verwendet wird.
    Du versuchst, eine Datei, die bereits geöffnet ist, ein zweites Mal zu öffnen.
    Streiche diese beiden Zeilen ersatzlos:

    VB.NET-Quellcode

    1. Fahrerdatei = saveFileDialog1.OpenFile()
    2. '...
    3. Fahrerdatei.Close()

    --------------------------------
    Kommt folgender Code dem nahe, was Dir vorschweb?

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. 'Speichert die aktuelle Fahrerliste
    3. Dim Fahrer_Gefunden As Boolean = False
    4. For Suche = 1 To 18
    5. If DirectCast(Meisterschaftsplatzierungen.Controls("Platz" & Suche), TextBox).Text > "" Then
    6. Fahrer_Gefunden = True
    7. Exit For
    8. End If
    9. Next Suche
    10. If Fahrer_Gefunden Then
    11. MessageBox.Show("Datei kann nicht gespeichert werden!" _
    12. & vbNewLine & "Es wurde/n kein/e Fahrer eingetragen!", "Keine Fahrernamen vorhanden", MessageBoxButtons.OK, MessageBoxIcon.Error)
    13. Return
    14. End If
    15. Using saveFileDialog1 As New SaveFileDialog()
    16. saveFileDialog1.Filter = "ini files (*.ini)|*.ini"
    17. saveFileDialog1.FilterIndex = 1
    18. saveFileDialog1.RestoreDirectory = True
    19. saveFileDialog1.FileName = "Fahrerliste"
    20. saveFileDialog1.Title = "Speichere Fahrerliste"
    21. If saveFileDialog1.ShowDialog() <> DialogResult.OK Then
    22. MessageBox.Show("Datei wurde nicht gespeichert!", "Speichern abgebrochen", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    23. End If
    24. For Schreiben = 1 To 18
    25. If DirectCast(Meisterschaftsplatzierungen.Controls("Platz" & Schreiben), TextBox).Text > "" Then
    26. ' Was soll alles in die Datei geschrieben werden?
    27. System.IO.File.WriteAllText(saveFileDialog1.FileName, Platz1.Text)
    28. Exit For
    29. End If
    30. Next Schreiben
    31. End Using
    32. End Sub

    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!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()

    Mir ist noch was anderes aufgefallen:

    Ar_oN schrieb:

    VB.NET-Quellcode

    1. Dim Fahrer_Gefunden As Integer = 0

    Wäre hier nicht Boolean logischer, oder kann da noch was anderes als 0 und 1 bei raus kommen !?!

    Außerdem ist es empfehlenswert, sämtlichen code grundsätzlich auf englisch zu schreiben, das macht den code international lesbar.
    Deutsch, Englisch Mix tut dem ganzen zwar funktional keinen Abbruch, stellt aber keinen guten Programmierstil da.
    Am besten gewöhnt man sich bestimmte Grundregeln des Programmierens von Anfang an an, um es sich nicht später, mühselig wieder abgewöhnen zu müssen. !

    Ar_oN schrieb:

    bin für jeden Tipp dankbar.
    Dann versuch die Unterschiede zwischen Deiner Vorgabe und meinen Änderungen zu verstehen.

    Ar_oN schrieb:

    Ich habe Fahrerdatei.Close() vor dem Schreiben eingefügt.
    Was passiert vor dem ASxchreiben mit dieser Datei? Was soll passieren?
    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!