Zeile aus Textdatei löschen?

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von jvbsl.

    Zeile aus Textdatei löschen?

    hi,

    ich versuche mit folgendem Code eine bestimmte Zeile aus einer .txt Datei zu löschen, aber da passiert nichts. Also es wird nichts gelöscht
    Hier mal der Code:

    Quellcode

    1. Public Sub DelLineFromFile(ByVal filename As String, ByVal line As Integer)
    2. Try
    3. Dim lines As String() = My.Computer.FileSystem.ReadAllText( _
    4. filename, System.Text.Encoding.Default).Split(vbCr)
    5. If line > 0 AndAlso line <= lines.Length Then
    6. Dim oStream As IO.StreamWriter = Nothing
    7. Try
    8. oStream = New IO.StreamWriter(filename, False, System.Text.Encoding.Default)
    9. Dim bNext As Boolean = False
    10. For i As Integer = 0 To lines.Length - 1
    11. If i + 1 <> line Then
    12. If bNext Then oStream.Write(vbCr)
    13. oStream.Write(lines(i))
    14. bNext = True
    15. End If
    16. Next
    17. Catch ex As Exception
    18. Finally
    19. If Not IsNothing(oStream) Then oStream.Close()
    20. End Try
    21. End If
    22. Catch ex As Exception
    23. End Try
    24. End Sub


    Aufrufen tu ich das ganz normal mit

    Quellcode

    1. DelLineFromFile("C:\...", 1)


    Danke schon mal

    P.S.:Datei ist vorhanden.
    Bitte VB-Tag benutzen.

    Eigentlich hast du schon alles in ein Array eingelesen. Dann musst du nicht nochmal alles einlesen. Du kannst direkt in deinem Array die entsprechende zeile löschen:

    VB.NET-Quellcode

    1. Try
    2. Dim writer as Streamwriter
    3. lines(line - 1) = ""
    4. writer = New Streamwriter(filename)
    5. For each lin in lines
    6. If Not lin = ""
    7. writer.Writeline(lin)
    8. end if
    9. Next
    10. writer.close
    11. Catch ex as Exception
    12. MsgBox(ex.tostring)
    13. End Try


    Lass dir am besten immer die Fehlermeldung mit ner Message Box oder so ausgeben.
    Dürfte so funktionieren habs aber nicht getestet.

    Mfg
    Firestorm
    du könntest es auch mit einer Liste machen.

    VB.NET-Quellcode

    1. Dim arr As String() = [lines]
    2. Dim lst As New List(Of String) : lst.AddRange(arr)
    3. lst.RemoveAt([index])
    4. Dim arr2 As String() = lst.ToArray()
    5. Using sw As New StreamWriter([path])
    6. sw.Write(Microsoft.VisualBasic.Join(arr2, vbCrNewLine))
    7. End Using

    Die Werte in eckigen Klammern sind zu ersetzen, sollte klar sein wodurch.
    Habs jetzt aber auch nicht getestet.

    VB.NET-Quellcode

    1. Public Sub DeleteLineFromFile(ByVal path As String, ByVal line As Integer)
    2. 'Inhalt der Datei in ein Array packen
    3. Dim lines As String() = File.ReadAllLines(path)
    4. 'Wir brauchen einen neuen StreamWriter, damit wir gleich die alten Daten wieder reinschreiben, bis auf die eine Zeile
    5. 'Append auf False, damit (alte) Daten überschrieben werden
    6. Dim sw As New StreamWriter(path, False)
    7. 'Eine For-Schleife, die alle Daten reinschreibt, bis auf die eine Zeile, die nicht erwünscht ist
    8. For i As Integer = 0 To lines.Length - 1
    9. 'Wenn es nicht die unerwünschte Zeile ist
    10. If Not i = line Then
    11. 'Schreiben lassen
    12. sw.WriteLine(lines(i))
    13. End If
    14. Next
    15. 'StreamWriter schließen
    16. sw.Close()
    17. sw.Dispose()
    18. End Sub


    MfG
    Ok, danke an alle... jetzt hab ich nur noch ein Problem: irgendwas benutzt meine Datei noch 8o
    Weiß jemand wie ich auf einmal alle Streams beenden kann?
    oder kann mir vielleicht jemand sagen warum hier noch was offen ist:

    VB.NET-Quellcode

    1. Dim sr4 As StreamReader = New StreamReader("C:\...")
    2. Dim dumm As Integer
    3. Dim stringlie As String
    4. For dumm = 1 To 1
    5. stringlie = sr4.ReadLine()
    6. 'do sth
    7. Next
    8. Dim check As String = DownloadWebpage(stringlie)
    9. If check IsNot "überprüfen" Then
    10. 'do sth
    11. End If
    12. sr4.Close()
    13. sr4.Dispose()
    Ok danke, mir war das jetzt zu stressig um alles nochmal durchzugehen, deswegen benutz ich jetzt Arrays :P
    Aber: irgendwie will meine While-Schleife nicht so wie ich will. Ich hab eine Datei, indenen lauter Links drinnen sind, die die Schleife einzeln durchgehen soll und dabei soll der Code runtergeladen werden, überprüft werden und wenn die Seite das enthält was ich brauch, soll die Schleife beendet werden. So sieht das bei mir jetzt aus, einzigstes Problem: bei Link 4 geht er automatisch aus der Schleife raus.

    VB.NET-Quellcode

    1. Dim ards As Integer = 0
    2. Dim blubb As Integer
    3. For blubb = 1 To lines.Length
    4. ards = blubb - 1
    5. Dim checkIt As String = DownloadWebpage(y.Item(ards)) 'hier wird der Code runtergeladen
    6. If checkIt.Contains("Sorry!") Then
    7. y.RemoveAt(ards) '"kaputter" Link aus Array werfen
    8. Else
    9. If checkIt.Contains("We just") Then
    10. link = y.Item(blubb)
    11. Exit For
    12. End If
    13. End If
    14. Next blubb


    Danke schon mal!
    am besten machst du aufjedenfall mal For blubb = 0 To lines.Length -1...
    ein Arrayindex beginnt immer bei 0

    ansonsten kann ich dir hier noch nicht viel mehr sagen...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---