Prozessdatei in Schleife auslesen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Prozessdatei in Schleife auslesen

    Hallo liebe Gemeinde,
    ich überarbeite derzeit ein vb.net-Programm, welches eine Textdatei überwacht, die von einem anderen Steuerprogramm (einer Maschine) geschrieben wird. Der Ablauf ist wie folgt:
    Bei jedem Neustart der Maschine wird die Datei ("Progress.txt") neu erstellt. Ein Kopfblock (ca. 15 Zeilen) enthält Angaben zu dem aktuellen Vorgang. Danach wird in unregelmäßigen Abständen eine Zeile hinzugefügt, um den Bearbeitungsstatus mitzuteilen.

    Bisher habe ich es so gelöst:
    - Beim ersten Einlesen: LastWriteTime der Progress.txt in Variable speichern und Kopfblock mit StreamReader auslesen, letzte gelesene Zeilennummer in Variable speichern.
    - Ein Timer hat alle 2 Sekunden geprüft, ob die LastWriteTime der Datei sich geändert hat, wenn ja -> mit StreamReader bis zur gespeicherten Zeilennummer lesen und alle weiteren Zeilen bis EOF einlesen und verarbeiten, danach LastWriteTime und letzte Zeilennummer in den Variablen aktualisieren.

    Die Lösung scheint mir jedoch ein wenig gebastelt. Habt ihr einen Gedankenanstoß wie ich das ohne Timer in einer Loop-Schleife lösen könnte? Am liebsten würde ich den StreamReader die ganze Zeit offen lassen. Aber wie bekommt der mit dass weitere Zeilen hinzu kommen?

    Vielen Dank für eure Ideen und einen schönen Sonntag! :)
    Es gibt die FileSystemWatcher-Klasse, die jedes Mal ein Event raised (hab gerade Wortfindungsstörungen), wenn sich eine gewünschte Datei irgendwie (kann man festlegen) verändert.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Den StreamReader offen lassen ist schlecht da, soweit ich weiß, solange er offen ist, die Datei "gesperrt" ist und andere (Programme) nicht darauf zugreifen können.

    Find glaub den Vorschlag von @VaporiZed nicht schlecht.

    P.s. @VaporiZed man könnte es Event auslösen nennen ;)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @dotNETNoob Du solltest bei jedem Event per .ReadAllLines(...) die ganze Datei lesen und dann vom letzten Aufruf her wissen, welche Zeilen neu sind.
    Das ist der minimale Aufwand.
    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!