![]() |
Auf Textdatei zugreifen
Hallo,
ich hätt da gerne mal ein Problem: Ich will aus einer Textdatei fortwährend die letzte Zeile auslesen. Diese Textdatei wird aber fortwährend von einem anderen Programm beschrieben (so alle 0,5 bis 1 Sekunden etwa). Wenn ich mit reset(datei) auf die Textdatei zugreifen will (mit Hilfe eines Timers, alle 5 ms), kommt (nicht immer, aber doch manchmal) die Fehlermeldung e/a-Fehler 32. Dies ist wohl eine Windows Fehlermeldung, wenn auf eine gemeinsam genutzte Datei zugegriffen wird. Wahrscheinlich wird wohl genau in diesem Moment in die Datei geschrieben. Die Textdatei ist aber nur kurz zum Schreiben geöffnet und wird dann wieder geschlossen. Im Prinzip sieht meine Timerproc so aus:
Delphi-Quellcode:
Wie kann man herausfinden, ob in die Textdatei von dem anderen Programm geschrieben wird um zu verhindern, dass reset(datei) eine Fehlermeldung erzeugt? Dann soll reset(datei) nicht ausgeführt werden und die Timerproc einfach verlassen werden.
reset(datei); {hier wird die Fehlermeldung ausgelöst}
sl := TStringList.Create; try sl.LoadFromFile('c:\Textdatei.txt') finally sl.free end; fileclose(datei); Wäre für jeden Tipp dankbar. Herzliche Grüße |
Re: Auf Textdatei zugreifen
Nimm besser einen Stream
|
Re: Auf Textdatei zugreifen
Wie geht das? Wärst du so nett mir ein Beispiel zu geben?
|
Re: Auf Textdatei zugreifen
du könntest aber auch denn IOResult abfragen
Delphi-Quellcode:
{$I-} While IOResult = 32 Do Begin Reset(txtFile); End; {$I+} //Restliche Verarbeitung |
Re: Auf Textdatei zugreifen
Schau unter
![]() Dann könntest du auch mal versuchen mit FileMode auf NurLese-Zugrif umzuschalten. eventuell erlaub das andere Programm ja einen reinen Lesezugriff, dann könntest du sogar die Datei geöffnet lassen und bräuchtest immer nur die hinzugefügten Daten auslesen. Das Auslesen nur der neuen Daten wäre eh von Vorteil, auch wenn du die datei jedesmal neu öffnest. PS: was passiert eigentlich, wenn das andere Programm grade in die Datei schreiben will, wärend du sie geöffnet hast? |
Re: Auf Textdatei zugreifen
Zitat:
Delphi-Quellcode:
das da könnte evtl. auch helfen...
FileClose(’C:\Temp\Test.txt’);
dadurch schließt du die datei wieder... aber was beim anderen programm dadurch passiert... kp... müsstest du halt mal testen... |
Re: Auf Textdatei zugreifen
Ich probiers gerade mal und schau mal was geht, danke für die Hilfe. Melde mich ggf nochmal.
|
Re: Auf Textdatei zugreifen
Zitat:
Wenn es bei ihm 'nen Zugriffsfehler gibt, dann pasiert ja noch nicht viel ... auslesen kann er das Neue später immernoch, aber das andere Programm wird da vermutlich große Probleme bekommen und eventuell die Daten nicht speichern. Zitat:
![]() |
Re: Auf Textdatei zugreifen
Hab jetzt mal
Delphi-Quellcode:
probiert. Merkwürdigerweise ist ein eingefügter Haltepunkt bei "exit" grün. Kommt das Prog dort nie hin?
{$I-}
if IOResult <> 32 then begin Reset(Datei[1]); end else exit; {$I+} |
Re: Auf Textdatei zugreifen
Habs gerad probiert, funzt nett.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:18 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