StreamWriter vorhandene Datei überschreiben - Debug Fehlermeldung Process cannot access the file " XXXXX" becaus it´s being used by another process

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von MY.NAME..

    StreamWriter vorhandene Datei überschreiben - Debug Fehlermeldung Process cannot access the file " XXXXX" becaus it´s being used by another process

    Hallo Zusammen,

    ich würde gerne um eure Hilfe bzw. einen Rat bitten. Unten stehendes Programm ist teil einer Hausaufgabe und obwohl es sicher kürzere, bessere Lösungsmöglichkeiten gibt soll es in dieser Art erstellt werden. Das Programm öffnet und speichert Dateien. Soweit funktioniert alles, nur wenn ich ein existierende Datei öffne, ändere und unter dem selben Dateinamen speichern möchte erhalte ich die Fehlermeldung dass auf die Datei nicht zugegriffen werden kann da sie bereits von einem anderen Prozess (wahrscheinlich der Teil dlgDateiOeffnen) genutzt wird. Habe es auch mit My.Computer.FileSystem.WriteAllText versucht, Fehler bleibt aber der selbe. Vorab schon vielen Dank und bitte entschuldigt mögliche "Fehler" oder Schwachstellen in meinem Post, ist meine erste Anfrage hier.

    Gr.
    MY.NAME.

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class frmEditor
    3. Private datei As String
    4. Private s As String
    5. Private t As String
    6. Private Sub ÖffnenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ÖffnenToolStripMenuItem.Click
    7. With dlgDateiOeffnen
    8. .AddExtension = True
    9. .DefaultExt = ".txt"
    10. .Filter = "Text (*.txt)|*.txt| Alle Dateien (*.*)|*.*"
    11. .Title = "Datei öffnen"
    12. .ValidateNames = True
    13. .FileName = datei
    14. End With
    15. dlgDateiOeffnen.ShowDialog()
    16. Dim lesen As New FileStream(dlgDateiOeffnen.FileName, FileMode.Open, FileAccess.ReadWrite, FileShare.None)
    17. Dim sr As New StreamReader(lesen)
    18. txtText.Text = sr.ReadToEnd()
    19. 'datei = dlgDateiOeffnen.FileName
    20. End Sub
    21. Private Sub SpeichernUnterToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SpeichernUnterToolStripMenuItem.Click
    22. With dlgDateiSpeichern
    23. .AddExtension = True
    24. .DefaultExt = ".txt"
    25. .Filter = "Text (*.txt)|*.txt| Alle Dateien (*.*)|*.*"
    26. .Title = "Datei speichern"
    27. .ValidateNames = True
    28. '.FileName = datei
    29. End With
    30. dlgDateiSpeichern.ShowDialog()
    31. datei = dlgDateiSpeichern.FileName
    32. If IO.File.Exists(datei) Then
    33. s = "Die Datei " & datei & " existiert bereits." & vbCrLf & "Soll diese überschrieben werden?"
    34. Else s = "Die Datei existiert noch nicht." & vbCrLf & "Soll diese erstellt werden?"
    35. End If
    36. If MessageBox.Show(s, datei, MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2) = DialogResult.No Then
    37. Exit Sub
    38. My.Computer.FileSystem.DeleteFile(datei)
    39. End If
    40. Dim sw As New StreamWriter(datei)
    41. dlgDateiSpeichern.FileName = ""
    42. sw.Write(txtText.Text)
    43. sw.Close()
    44. Close()
    45. 'txtText.Text = ""
    46. End Sub
    47. Private Sub NEUToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles NEUToolStripMenuItem.Click
    48. If txtText.Modified Then
    49. Dim s = "Der Inhalt wurde geändert." & vbCrLf & "Schliessen ohne zu speichern?"
    50. If MessageBox.Show(s, datei, MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1) = DialogResult.No Then
    51. Exit Sub
    52. End If
    53. End If
    54. Close()
    55. End Sub
    56. Private Sub BeendenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles BeendenToolStripMenuItem.Click
    57. If txtText.Modified Then
    58. Dim s = "Der Inhalt wurde geändert." & vbCrLf & "Schliessen ohne zu speichern?"
    59. If MessageBox.Show(s, datei, MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1) = DialogResult.No Then
    60. Exit Sub
    61. End If
    62. End If
    63. Close()
    64. End Sub
    65. End Class
    @MY.NAME. Willkommen im Forum. :thumbup:
    Zunächst wäre es hilfreich, wenn Du uns die Zeile im Code mitteilst, in der der Fehler auftritt.
    Probierma dies:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub ÖffnenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ÖffnenToolStripMenuItem.Click
    2. With dlgDateiOeffnen
    3. .AddExtension = True
    4. .DefaultExt = ".txt"
    5. .Filter = "Text (*.txt)|*.txt| Alle Dateien (*.*)|*.*"
    6. .Title = "Datei öffnen"
    7. .ValidateNames = True
    8. .FileName = datei
    9. End With
    10. If dlgDateiOeffnen.ShowDialog() = DialogResult.OK Then
    11. txtText.Text = IO.File.ReadAllText(dlgDateiOeffnen.FileName)
    12. 'Dim lesen As New FileStream(dlgDateiOeffnen.FileName, FileMode.Open, FileAccess.ReadWrite, FileShare.None)
    13. 'Dim sr As New StreamReader(lesen)
    14. 'txtText.Text = sr.ReadToEnd()
    15. 'datei = dlgDateiOeffnen.FileName
    16. End If
    17. End Sub
    18. Private Sub SpeichernUnterToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SpeichernUnterToolStripMenuItem.Click
    19. With dlgDateiSpeichern
    20. .AddExtension = True
    21. .DefaultExt = ".txt"
    22. .Filter = "Text (*.txt)|*.txt| Alle Dateien (*.*)|*.*"
    23. .Title = "Datei speichern"
    24. .ValidateNames = True
    25. '.FileName = datei
    26. End With
    27. If dlgDateiSpeichern.ShowDialog() <> DialogResult.OK Then
    28. Return
    29. End If
    30. datei = dlgDateiSpeichern.FileName
    31. If IO.File.Exists(datei) Then
    32. s = "Die Datei " & datei & " existiert bereits." & vbCrLf & "Soll diese überschrieben werden?"
    33. Else : s = "Die Datei existiert noch nicht." & vbCrLf & "Soll diese erstellt werden?"
    34. End If
    35. If MessageBox.Show(s, datei, MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2) = DialogResult.No Then
    36. Exit Sub
    37. My.Computer.FileSystem.DeleteFile(datei)
    38. End If
    39. IO.File.WriteAllText(datei, txtText.Text)
    40. 'Dim sw As New StreamWriter(datei)
    41. 'dlgDateiSpeichern.FileName = ""
    42. 'sw.Write(txtText.Text)
    43. 'sw.Close()
    44. 'Close()
    45. 'txtText.Text = ""
    46. 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!
    @ RodfromGermany: Vielen Dank nochmal. Dein Code hat funktioniert, allerdings wollte mein Lehrer Streamreader & writer im Programm haben. Lösen konnte ich das dann über Using .... End Using, dass ich im Private Sub ÖffnenToolStripMenuItem_Click Teil angefügt habe.