AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Datei Lesen in welche dauernd neue daten geschrieben werden
Thema durchsuchen
Ansicht
Themen-Optionen

Datei Lesen in welche dauernd neue daten geschrieben werden

Ein Thema von Volle · begonnen am 2. Mai 2006 · letzter Beitrag vom 2. Mai 2006
Antwort Antwort
Volle

Registriert seit: 25. Nov 2003
Ort: Stuttgart
100 Beiträge
 
Delphi 7 Personal
 
#1

Datei Lesen in welche dauernd neue daten geschrieben werden

  Alt 2. Mai 2006, 01:24
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: DP Link)

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:
Im Projekt ....exe ist eine Exception der Klasse EFOpenError aufgetreten. Meldung: 'Datei ...console.log kann nicht geöffnet werden. Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
ich lasse die datei in eine stringliste laden.
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
cYa n' sTay [ S ! C ]
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#2

Re: Datei Lesen in welche dauernd neue daten geschrieben wer

  Alt 2. Mai 2006, 01:51
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: Datei Lesen in welche dauernd neue daten geschrieben wer

  Alt 2. Mai 2006, 08:09
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
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Datei Lesen in welche dauernd neue daten geschrieben wer

  Alt 2. Mai 2006, 08:56
Wenn Du etwas bezahlen willst, dann gibt es dafür auch
eine Komponente: http://www.appcontrols.com/diskcontrols.html
Sie beinhaltet File Tail, das ist so etwas was Du vielleicht suchst.

Und noch ein Beispiel wie man es zu Fuß machen könnte.
http://groups.google.de/group/comp.l...18f3db18a0a17d

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Volle

Registriert seit: 25. Nov 2003
Ort: Stuttgart
100 Beiträge
 
Delphi 7 Personal
 
#5

Re: Datei Lesen in welche dauernd neue daten geschrieben wer

  Alt 2. Mai 2006, 10:30
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:
Im Projekt csstatsv2.exe ist eine Exception der Klasse EOSError aufgetreten. Meldung: 'Systemfehler. Code: 1400.
Ungültiges Fensterhandle'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
der Witz an der sache:

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 ?
cYa n' sTay [ S ! C ]
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz