Stream Reader freigeben?

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von thefiloe.

    Stream Reader freigeben?

    Hi,

    ich lese einen Text File mit dem Stream Reader zeilenweise in eine List(of Strings).

    VB.NET-Quellcode

    1. Dim fileReader As System.IO.StreamReader
    2. fileReader = My.Computer.FileSystem.OpenTextFileReader(DwnfLogFile)
    3. Dim strLine As String
    4. While fileReader.Peek <> -1
    5. strLine = fileReader.ReadLine()
    6. If LineSelected(strLine) Then lstLog.Items.Add(strLine)
    7. End While


    Im nächsten Schritt würde ich gern den Text File fortsetzen. Das versuche ich wie folgt:

    VB.NET-Quellcode

    1. File.AppendAllText(DwnfLogFile, WriteLines(i) & Environment.NewLine)


    Das scheitert mit der Meldung:

    Der Prozess kann nicht auf die Datei ... zugreifen, das sie von einem anderen Prozess verwendete wird.

    Offensichtlich hat der StreamReader noch den Daumen auf dem File. Ich hab versucht den Stream Reader mit USING einzurahmen ... das klappt aber nicht:

    Fehler 4 Die Using-Ressourcenvariable muss über eine explizite Initialisierung verfügen.

    Wie kann ich den Stream Reader denn sauber beenden?

    LG
    Peter

    Peter329 schrieb:

    VB.NET-Quellcode

    1. Dim fileReader As System.IO.StreamReader
    Mach da ein Using drumherum:

    VB.NET-Quellcode

    1. Using fileReader As System.IO.StreamReader
    2. ' hier der ganze Code
    3. End Using
    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!
    Ne, das mit dem Using klappt ja gerade nicht ... s. die Fehlermeldung in meinem Beitrag.

    Aber das hier klappt:

    VB.NET-Quellcode

    1. fileReader.Close()


    Ich hatte ganz einfach die Close Anweisung vergessen. :)
    kleiner Tipp am Rande, versuch am besten die .Net-Mittel zu verwenden, und nicht den My-Namespace. Dieser dient nur Umsteigern von VB6 zu VB.Net als kurzweilige Hilfe sich zurecht zu finden.
    Anstatt also

    Peter329 schrieb:

    My.Computer.FileSystem.OpenTextFileReader(DwnfLogFile)

    zu benutzen, verwendest du

    VB.NET-Quellcode

    1. System.IO.File.OpenRead() 'oder so ähnlich

    Peter329 schrieb:

    Close Anweisung
    Du überschreibst Deine fileReader-Variable. :/ Ist mir vorhin nicht aufgefallen. :cursing:

    Peter329 schrieb:

    VB.NET-Quellcode

    1. Dim fileReader As System.IO.StreamReader
    2. fileReader = My.Computer.FileSystem.OpenTextFileReader(DwnfLogFile)
    Nimm die erste und das Using und gib Deinem Projekt Option Strict On.

    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!
    Wenn du die .net-Mittel nicht kennst, bitte nicht posten @EaranMaleasi. Denn "oder so ähnlich" trifft hier überhaupt nicht zu. OpenRead gibt einen öffnet einen rohen FileStream mit Leserechten (jedoch keinen StreamReader).
    Damit das alles jedoch trotzdem schnell und einfach geht hat der StreamReader Konstruktor eine Überladung mit einem Dateipfad: msdn.microsoft.com/de-de/library/f2ke0fzy(v=vs.110).aspx


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.