[VB 2010 Express] Prozess konnte Datei nicht öffnen!

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

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

    [VB 2010 Express] Prozess konnte Datei nicht öffnen!

    Hallo!
    Ich arbeite derzeitig (wieder) an einem Projekt. Dort soll, wenn eine Form sich öffnet, der Inhalt einer .txt Datei in eine ListBox geöffnet werden. (Funktioniert!)
    Doch, wenn ich die Form schließe (dabei wird die Datei gespeichert) erhalte ich den Fehler "Der Prozess kann nicht auf die Datei "C:\\Infomania\History.txt" zugreifen, da sie von einem anderen Prozess verwendet wird."
    Hier der Code:

    VB.NET-Quellcode

    1. Private Sub Form12_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    2. IO.Directory.CreateDirectory("C:\\Infomania")
    3. Dim w As New IO.StreamWriter("C:\\Infomania\History.txt")
    4. Dim i As Integer
    5. For i = 0 To ListBox1.Items.Count - 1
    6. w.WriteLine(ListBox1.Items.Item(i))
    7. Next
    8. w.Close()
    9. End Sub
    10. Private Sub Form12_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    11. Dim r As New IO.StreamReader("C:\\Infomania\History.txt")
    12. While (r.Peek() > -1)
    13. ListBox1.Items.Add(r.ReadLine)
    14. r.Close()
    15. End While
    16. End Sub

    Ich hoffe, jemand hier kann mir helfen!
    MfG vich
    “If debugging is the process of removing software bugs, then programming must be the process of putting them in.”
    -Unbekannt
    Moin,

    setze dein ​r.Close() außerhalb der While-Schleife. Dann wird die Datei sogar irgendwann geschlossen!

    Nochwas: Es ist kein gutes Verhalten von Programmen, wenn sie im Wurzelverzeichnis des Systemlaufwerks Unterverzeichnisse erstellen, an Dateien rumeditieren etc.
    Des Weiteren zeugen Namen wie ​Form12 von keiner guten Struktur. Gib deiner Form einen richtigen Namen.
    Mit freundlichen Grüßen,
    Thunderbolt

    HolySandvich schrieb:

    von einem anderen Prozess verwendet
    Beuge dem vor, indem Du mit Using arbeitest:

    VB.NET-Quellcode

    1. Using w As New IO.StreamWriter("C:\\Infomania\History.txt")
    2. ' ...
    3. End Using
    4. ' und
    5. Using r As New IO.StreamReader("C:\\Infomania\History.txt")
    6. ' ...
    7. End Using
    Und das Auslesen geht in einem Einzeiler so:

    VB.NET-Quellcode

    1. ListBox1.Items.AddRange(IO.File.ReadAllLines("C:\\Infomania\History.txt"))
    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!