PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [VB.NET] Zeile aus Datei auslesen und löschen



PCFX
22.07.2009, 09:37
Hi,
ich möchte eine Favouritenliste erstellen. Wenn ich eine Datei hinzufüge, wird der Dateipfad in eine .txt geschrieben und der Dateiname als Listbox1.Item.Add(...). Wenn ich diesen nun entfernen will dachte ich, ich lasse den Namen des Eintrages mit "IndexOf" in der .txt suchen. Aber wie kann ich diese Zeile jetzt komplett aus der .txt löschen, damit beim Einlesen kein leerer Eintrag gemacht wird? Also nicht:


C:\123.mp3
C:\456.mp3

C:\789.mp3

Die Leerzeile soll es nicht geben.

krusty
22.07.2009, 10:12
ufff also ich würde es so machen (gibt sicherlich bessere methoden)
dim alle_titel as string = io.filesystem.readalltext("C:\Playerlist.txt")
dim Zeilenarray() as string = alle_titel.split(vbCrLf)
nun hast du in Zeilenarray(0) die erste zeile, in Zeilenarray(1) die zweite zeile.

Wenn du jedoch den namen des Liedes hast, geht das ganz einfach. zB
dim meine_playerlist as string = io.filesystem.readalltext("C:\Playerlist.txt").replace("Love is gone.mp3","")
Du ersetzt zB den Titel Love is gone durch NICHTS.
dann müsstest du die überatbeitete Textdatei wieder speichern lassen.

Uf sind bestimmte ne menge fehler drinne, aber hoffe es hilft dir

LeadOr
22.07.2009, 11:48
mach indexof(Controlchars.crlf & "deinem text")
und dann sollte er ja mit dem löschen die zeile drüber anfangen.

PCFX
22.07.2009, 17:27
Versteh ich nicht ganz..
Also ich habe eine Listbox:


123.mp3
456.mp3

Dann habe ich eine *.txt aus der ausgelesen und in die Listbox eingefügt wird:


C:\User\Musik\123.mp3
C:\User\Musik\456.mp3

Wenn ich nun im Programm den Eintrag "456.mp3" markiere und aus der Listbox löschen will, soll auch C:\User\Musik\456.mp3 aus der *.txt gelöscht werden, damit dieser Wert beim nächsten mal nichtmehr ausgelesen wird.
Sollte nun verständlicher sein :)

inout
22.07.2009, 18:20
Suchst Du Sowas in der Art?


Private Function ExtractFileNameFromPath(ByVal FilePath As String) As String
Return FilePath.Substring(FilePath.LastIndexOf("\") + 1)
End Function

Private Sub DeleteFileNameFromFile(ByVal FilePath As String, ByVal FileName As String)
Dim Lines As New List(Of String)
Dim Line As String
Dim sr As New System.IO.StreamReader(FilePath)
While Not sr.EndOfStream
Line = sr.ReadLine
If ExtractFileNameFromPath(Line) <> FileName Then
Lines.Add(Line)
End If
End While
sr.Close()
sr.Dispose()
Dim sw As New System.IO.StreamWriter(FilePath)
For Each Line In Lines
sw.WriteLine(Line)
Next
sw.Close()
sw.Dispose()
End Sub
Aufruf:

DeleteFileNameFromFile("c:\test.txt", "blub.txt")//kürzer


Private Sub DeleteFileNameFromFile1(ByVal FilePath As String, ByVal FileName As String)
Dim Lines() As String = IO.File.ReadAllLines(FilePath)
Dim sw As New System.IO.StreamWriter(FilePath)
For Each Line In Lines
If ExtractFileNameFromPath(Line) <> FileName Then
sw.WriteLine(Line)
End If
Next
sw.Close()
sw.Dispose()
End Sub