StreamWriter/Reader Problem

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von haiyyu.

    StreamWriter/Reader Problem

    Hallo,


    Ich habe da ein Problem, ich möchte den Inhalt eines Labels mit Steamwriter speichern und beim nächsten Start der Anwendung auslesen, doch er speichert den neuen Inhalt als 2. Zeile und so weiter, wie kann ich die 1. Zeile immer wieder überschreiben bzw. nur die letzte Zeile auslesen?




    mfG Loquax

    VB.NET-Quellcode

    1. Dim lines() As String = System.IO.File.ReadAllLines(DEIN_FILE)

    Nimm das letzte Element.
    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!
    Nöm... Da wird's aber Problemen mit der Dateigröße geben wenn man oft speichert.

    Wenn in der Datei nur der Inhalt des Labels stehen soll verwende

    VB.NET-Quellcode

    1. IO.File.WriteAllText("Pfad zur Datei", "Inhalt")
    2. 'Und zum Auslesen
    3. Bla = IO.File.ReadAllText("Pfad zur Datei")
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Dafür willst du StreamReader und StreamWriter nutzen? Mach es lieber mit My.Settings

    VB.NET-Quellcode

    1. 'Speichern
    2. My.Settings.DeinSetting = LabelXY.Text
    3. My.Settings.Save()
    4. 'Laden
    5. LabelXY.Text = My.Settings.DeinSetting


    Und noch was ... Lern die Grundlagen!
    Mein Label enthält eine 1 und nachdem eine Progressbar bei 100% ist passiert folgendes

    VB.NET-Quellcode

    1. Label2.Text += 1


    Aber die Einstellungen haben beim ersten Start der Anwendung noch nichts gespeichert, deshalb wird kein Label angezeigt und die Anwendung bricht ab nachdem die Progressbar bei 100% ist.

    Error:

    "Ungültige Konvertierung von der Zeichenfolge in Typ Double."

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Loquax“ ()

    Hier der ganze Code

    VB.NET-Quellcode

    1. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    2. My.Settings.Level = Label2.Text
    3. My.Settings.Save()
    4. End Sub
    5. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    6. Label2.Text = My.Settings.Level
    7. End Sub
    8. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    9. ProgressBar1.Maximum = 100
    10. ProgressBar1.Value += 1
    11. If ProgressBar1.Value = 100 Then
    12. Label2.Text += 1
    13. ProgressBar1.Value -= 100
    14. End If
    15. End Sub
    16. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    17. Timer1.Start()
    18. End Sub
    19. End Class
    Dein Fehler ist unter anderem, dass du "Label2.Text += 1" schreibst.
    Du weist einem String einen Integer-Wert zu.
    So ist es besser:

    VB.NET-Quellcode

    1. Label2.Text = (Int32.Parse(Label1.Text) + 1).ToString()
    Außerdem solltest du für solch einfache Dinge lieber System.IO.File.Read/WriteAllText() verwenden.
    und ich kann.mich irren, aber Settings.Level wird.ein Integer sein?
    Dann:

    VB.NET-Quellcode

    1. My.Settings.Level = Integer.Parse(Label2.Text)

    und nimm dir zu herzen, dass man norm. die Variablen Werte nicht in einem Label speichert. Dafür gibts Variablen.
    Habe es ausgebessert, aber er zeigt jetzt bei deiner Zeile an "Die Eingabezeichenfolge hat das falsche Format." nachdem die progressbar bei 100% ist.

    Eigentlich soll die Progressbar auf 100% laufen und dann resetten und immer wenn sie einmal durch ist steigt das Level (Anzeige in einem Label) um 1.
    hmm...

    VB.NET-Quellcode

    1. Dim var As Integer
    2. Dim progress As Integer
    3. Sub Timer_Tick()
    4. progress += 1
    5. if progress = 100 then
    6. progress = 0
    7. var += 1
    8. end if
    9. label2.text = var.tostring()
    10. progressbar.value = progress
    11. End Sub


    Und nun denk dir aus, wie man das speichern kann.
    erstmal: VB-Tag richtig benutzen - dass dein code auch so schön eingerückt ist ;)

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private _Level As Integer
    3. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) Handles Me.FormClosing
    4. My.Settings.Level = _Level 'in den ProjektProperties abspeichern der Settings einstellen
    5. End Sub
    6. Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    7. _Level = My.Settings.Level
    8. Label2.Text = _Level.ToString
    9. End Sub
    10. Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles Timer1.Tick
    11. 'ProgressBar1.Maximum = 100 'im Designer einstellen
    12. With ProgressBar1
    13. .Value += 1
    14. If .Value = .Maximum Then
    15. _Level += 1
    16. Label2.Text = _Level.ToString
    17. .Value = 0
    18. End If
    19. End With
    20. End Sub
    21. Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
    22. Timer1.Start()
    23. End Sub
    24. End Class
    Ja, das gibt's.
    Allerdings ist das mehr in Form eines Buches zu haben.
    Keine Angst, sowas gibt's gratis im Internet.

    Siehe unten.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „haiyyu“ ()