![]() |
Datei Lesen in welche dauernd neue daten geschrieben werden
Hoi leute,
bin derzeit dabei ein kleines prog zu schreiben. es liest eine log datei aus in welche dauernd neue zeilen eingefuegt werden. ( es geht um die consolenausgabe eines spiels ) nun will ich diese logfile auslesen, was auch kein problem bereitet solange ich nur ab und zu zugreife. ich benutze die hier irgendwo gepostete funktion um festzustellen ob in der datei neue daten stehen ( das hier: ![]() wenn aber z.b. 2 neue zeilen in die logfile geschrieben werden dann bekomme ich ein problem. mein prog erkennt es, laedt die datei aber im gleichen moment will das spiel schon wieder reinschreiben, bzw mein prog bekommt kein recht die datei zu lesen. ich bekomme jedenfalls folgende fehlermeldung: Zitat:
dort kann ihc nicht wirklich angeben wie die datei geladen werden soll, ich denke aber readonly ist da standart oder ? auch wenn ich die datei ueber nen filestream laden will ( readonly ) geht das nicht. hat jemand ne simple moeglichkeit einfach eine datei zu ueberwachen und wenn was neues dazukommt das neue auszugeben ? ich hoff ichh ab mich eineirgermassen verstaendlich ausgedrueckt :> danke schonmal im vorraus |
Re: Datei Lesen in welche dauernd neue daten geschrieben wer
Am Einfachsten wäre es, wenn du die Datei kopierst und dann in Ruhe die Kopie ausließt.
Aber idealer wäre wohl, wenn du dir direct per CreateFile die Datei öffnest und nur die neuen Daten ausließt .. das ginge jedenfalls am schnellsten. Also bis Dateiende lesen und diese Position speichern ... datei schließen. Wenn datei größer geworden ist ab dem nächsten Byte bis zum neuen dateiende lesen und wieder die Position merken und datei schließen. (eventuell die neuen Dann an die vorher gelesenen daten anhängen). Wenn das Spiel die Datei mir SharedRead öfnet, dann kannst du ja auch in Ruhe die Datei im NurleseModus und mit ShardReadWrite... geöfnet haben, ohne das es Probleme gibt. Am Sichersten wäre es aber wohl die Dateifunktionen zu hocken und die gewünschen Daten garnicht erst in der datei, sondern direkt im RAM auslesen ... also wärend das Spiel diese Daten in die Datei schreiben will. |
Re: Datei Lesen in welche dauernd neue daten geschrieben wer
Herzlich willkommen in der Delphi-PRAXiS, Volle.
Wenn du die Log-Datei mit TStringList.LoadFromFile() einliest, dann trifft dich keine Schuld am Zugriffskonflikt, da diese Methode die korrekten share flags verwendet. Aber tust du das auch wirklich? Wie groß ist diese Log-Datei? Liest du die immer komplett ein, obwohl du nur die neu hinzugekommenen Zeilen brauchst? Freundliche Grüße vom marabu |
Re: Datei Lesen in welche dauernd neue daten geschrieben wer
Wenn Du etwas bezahlen willst, dann gibt es dafür auch
eine Komponente: ![]() Sie beinhaltet File Tail, das ist so etwas was Du vielleicht suchst. Und noch ein Beispiel wie man es zu Fuß machen könnte. ![]() Grüße Klaus |
Re: Datei Lesen in welche dauernd neue daten geschrieben wer
hey danke fuer die schnellen antworten!!!!
also die file hat eigentlich maximal 50kb, vllt auch ein wenig mehr, was ja eigentlich schnell zu laden geht. die idee mit dem kopieren is gut, das probiere ich gleich mal aus. Ich hatte die Datei mit Tstringlist.loadfromfile() gelesen, habe aber trotzdem die zugriffsverletzung bekommen. Ansich moechte ich nur die neuen Daten haben, habe bis jetzt aber immer die komplette file eingelesen. Jetzt habe ich mal den Tipp von Klaus01 wahrgenommen ( den goole link ), das klappt auch soweit alles, nur bekomme ich nun folgende fehlermeldung: Zitat:
ich kann ihn nihct mal wirklich reproduzieren! Wenn ich mein prog starte und dann das game, dann tritt der fehler auf, speichere ich die Log file ab und lasse sie dann schritt fuer schritt durchlaufen dann bekomme ich ueberhaupt keinen fehler. Kann es sein dass ich, wenn viele daten ganz kurz nacheinander geschrieben werden, ich probleme mit ner ubeerlagerung bekomm ? dass praktisch mein programm 2x mitbekommt oha es wurde die datei veraendert und beide male in eine globale variable schreiben will ohne dass die 1. routine damit fertig ist ? denn ich arbeite eigentlich in meiner routine die ueberprueft was drin steht nichts mit irgendeinem fenster oder so. ich arbeite eigentlich nur mit globalen variablen... [Edit] wollte gerade mal die diskcontrols ausprobieren, hoert sich ja gut an und da ich eh nicht vor habe fuer mein prog geld zu verlangen geht das ja ansich klar. ich bekomm das ding nur leider ueberhaupt nich in delphi rein. ich bekomme dauernd, wenn ich die kompo installieren will, die meldung die datei dcabout.pas sei nicht vorhanden. is sie auch nicht es gibt n ur ne dcabout.dcl ( das sind files von der komponente ). ich hatee so ein problem schon oefters, muss ich nur wo was einstellen ( in delphi ) oder hat die installation der komponenete n fehler ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz