Streamwriter speichern

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Quakxi.

    Streamwriter speichern

    Hallo,

    folgendes Problem:
    Mein Progamm schreibt wärend der Laufzeit in eine Datei. Wenn das Programm jetzt abgeschossen wird, wird allerdings nicht das Close Event der Form ausgeführt => stream.Close() wird auch nicht ausgeführt.
    Gibt es keine Möglichkeit das Programm zwischen zu speichern, so dass ich z.b. einfach mit nem Timer alle 10 sec. mal ne Save-Methode ausführe wie es z.b. beim XMLDocument möglich ist?
    Intel i7-4710HQ |Nvidia GTX 860M | 1TB SSHD| 8GB RAM 1600Mhz :saint:
    Intel Core Duo2 | 320GB | 4 GB RAM | Linux Debian :D
    AMD E-350 | 320GB| 6GB RAM :thumbdown:
    Ich würde den StreamWriter immer in nen Using Block packen, da man sich dann das geclose erspart. Using disposed schon selbst.

    Zu deinem Problem. Ich weiß ja nicht wie lange deine Speicheraktion dauert, dass es möglich ist in der Zwischenzeit dein Programm vor dem disposen
    des StreamWriters abzuschießen, aber ich denke selbst dann wirst du das Problem nicht so gelöst bekommen, da ja auch während dem zwischenspeichern alle 10 Sekunden, deine
    Anwendung abgeschossen werden kann. Dann wäre deine Datei trotz vorheriger Zwischenspeicherei vielleicht kaputt oder nicht fertig geschrieben.
    Wenn im TaskManager Task Beenden gedrückt wird, versucht Windows zu erst mal das Programm nett zu bitten sich zu beenden usw (kennste ja). Dieses Event kann man eigentlich abfangen.
    Aber wenn der Prozess tatsächlich forcekilled wird, dann kannst du soweit ich weiß nur deine Speichermethoden evtl. bisschen umstrukturieren.

    VB.NET-Quellcode

    1. Streamwriter.flush()
    2. ' Oder
    3. ​Streamwriter.AutoFlush = true


    Soweit ich das richtig verstanden habe, schreibt der Streamwriter sofort, wenn AutoFlush auf true gesetzt wurde.
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D
    Eigentlich ist das eine generelle Frage, ich hatte jetzt in alten Projekten jetzt immer wieder mal das Problem, das ich erst mal Stream.Close aufrufen musste, und dann nen neuen Stream erzeugen was recht ineffizent ist, ist mir gerade ingefallen weil ich meine Projekte ausmiste
    Intel i7-4710HQ |Nvidia GTX 860M | 1TB SSHD| 8GB RAM 1600Mhz :saint:
    Intel Core Duo2 | 320GB | 4 GB RAM | Linux Debian :D
    AMD E-350 | 320GB| 6GB RAM :thumbdown:
    Bin jetzt leider nur zum Teil weiter gekommen. Ich hab gerade ein bisschen mit einem Programm rumgebastelt, welches mehr oder weniger endlos Zahlen in eine File schreibt.
    Problem ist jetzt aber folgendes:
    Ich würde gern wärend das Programm läuft die File mit z.b. Notepad zu öffnen und die bis zu diesem Zeitpunkt hineingeschreibenen Elemente zu lesen.
    Mit Flush muss ich aber immernoch warten bis das Programm geschlossen wurde bzw. bis die Close() Methode ausgeführt wurde.
    Intel i7-4710HQ |Nvidia GTX 860M | 1TB SSHD| 8GB RAM 1600Mhz :saint:
    Intel Core Duo2 | 320GB | 4 GB RAM | Linux Debian :D
    AMD E-350 | 320GB| 6GB RAM :thumbdown:
    Bei mir funktionierts. Habs mal so getestet:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim filePath As String
    3. Using sfd As New SaveFileDialog With {.CheckPathExists = True}
    4. If sfd.ShowDialog = DialogResult.OK Then filePath = sfd.FileName Else Return
    5. End Using
    6. Dim rnd As New Random
    7. Using sw As New IO.StreamWriter(New IO.FileStream(filePath, IO.FileMode.Create, IO.FileAccess.Write)) With {.AutoFlush = True}
    8. Do
    9. sw.WriteLine(rnd.Next())
    10. Loop
    11. End Using
    12. End Sub


    Ich kann währenddessen mitlesen (muss Datei aber neu einlesen jedes mal) und wenn ich den prozess forcekille gibts auch kein Problem

    MfG Tim
    Ganz vergessen Sry:

    Ja es geht schon, aber wenn ich jetzt mit notepad wärend der Laufzeit öffne, seh ich trotzdem noch nciht die neuen Daten. Ich habe mich jetzt damit abgefunden, bin aber für jede neue Lösung offen.

    EDIT: Jetzt gehts, ich hätte viell. nicht ne über USB verbundene Festplatte als workingdirection nehmen sollen.
    Intel i7-4710HQ |Nvidia GTX 860M | 1TB SSHD| 8GB RAM 1600Mhz :saint:
    Intel Core Duo2 | 320GB | 4 GB RAM | Linux Debian :D
    AMD E-350 | 320GB| 6GB RAM :thumbdown: