Vorhandene Einträge in TXT Datei überschreiben

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Replica.

    Vorhandene Einträge in TXT Datei überschreiben

    Moin,
    in meinem Script werden (nach Absenden) IP Adressen und Rechnernamen in eine TXT Datei geschrieben.


    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles backup.Click
    2. Shell("\\Servername\batchdatei.bat", vbMaximizedFocus)
    3. My.Computer.FileSystem.WriteAllText("\\Servername\ipadressen.txt", vbNewLine + Addresslist(0).ToString, True, System.Text.Encoding.ASCII)
    4. My.Computer.FileSystem.WriteAllText("\\Servername\ipadressen.txt", " - ", True, System.Text.Encoding.ASCII)
    5. My.Computer.FileSystem.WriteAllText("\\Servername\ipadressen.txt", GetComputerName().ToString, True, System.Text.Encoding.ASCII)
    6. End Sub

    ich weiß, es ist nicht die eleganteste Lösung



    was nachher dann in etwa so aussieht
    169.168.123.456 - RechnerXY

    Nun besteht aber das Problem, das er bei jedem Mal eine neue Zeile mit entsprechendem Namen und IP Adresse anlegt, auch wenn der Name schon vorhanden ist.

    So dass dann nach dem 2ten mal absenden, folgendes in der txt steht.
    169.168.123.456 - RechnerXY
    169.168.123.456 - RechnerXY


    Wie kann ich ihm nun sagen. Lese die TXT ein, vergleiche deren Inhalt mit der <Eingabe> und überschreibe mir die entsprechende Zeile? (oder alternativ, tue gar nichts wenn der Eintrag schon vorhanden ist)


    hat jemand ne Idee?
    ok, ich hab jetzt das "voll" veraltete Shell gegen Process.Start ersetzt
    Danke ;)


    Was das Auslesen betrifft, so war mir das IO.File.ReadAllLines schon mal übern Weg gelaufen.
    nur wie sag ich ihm, les mir das aus, überprüfe ob es schon vorhanden ist und wenn ja dann füg nichts hinzu?

    Das ist nämlich das Problem vor dem ich stehe :S
    ich schreib dieses Programm nicht freiwillig, falls du das meinst... aber lassen wir das.

    was ich nicht verstehe, ist im Prinzip das was ich schon geschrieben habe
    "... les mir das aus, überprüfe ob es schon vorhanden ist und wenn ja dann füg nichts hinzu"
    Den Brauchst du eine Liste:

    VB.NET-Quellcode

    1. Dim Guck As New List(Of Strig)


    Die Liste füllen

    VB.NET-Quellcode

    1. Guck.AddRange(IO.File.ReadAllLines("pfad"))


    Abgleichen:

    VB.NET-Quellcode

    1. If Guck.Contains("blabla") = True Then
    2. 'Und dein Code der etwas hinzufügt
    3. End If

    Mr. VB schrieb:

    If Guck.Contains("blabla") = True Then
    Ist zwar richtig, verursacht aber Augenkrebs.
    Ein einfaches

    VB.NET-Quellcode

    1. If Guck.Contains("blabla") Then
    tut's genauso und hat den Vorteil der Lesbarkeit.

    Wenn es wahr ist, dass "blabla" in Guck enthalten ist, dann...
    vs.
    Wenn "blabla" in Guck enthalten ist, dann...

    Welcher Satz ist einfacher zu lesen?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ab Framework 3.5 gibt es für List (Of T) die Distinct-Methode zur Bereinigung von Duplikaten. Du kannst mal so versuchen:

    VB.NET-Quellcode

    1. Dim myList As New List(Of String)
    2. ' Vorhandene Daten aus einer Datei laden
    3. myList.AddRange(IO.File.ReadAllLines("pfad"))
    4. ' Weitere Daten hinzufügen
    5. myList.Add("...")
    6. ' Duplikate bereinigen
    7. myList = CType(myList.Distinct, List(Of String))
    8. ' Speichern
    9. IO.File.WriteAllText("pfad", String.Join(vbNewLine, myList.ToArray))