![]() |
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.
|
Re: Auf Textdatei zugreifen
du machst aber bevor du denn ioresult abfragst schon auch ein reset???
deine if abfrage ist glaub auch falsch geschrieben oder??? müsste sie nich so aussehen...
Delphi-Quellcode:
if ioresult <> 32 then
Reset(txtFile) else exit; |
Re: Auf Textdatei zugreifen
Zitat:
wenn vorher nicht versucht wurde die Datei zu öffnen. Grüße Klaus |
Re: Auf Textdatei zugreifen
Hallo Klaus,
auch hier ist ein Haltepunkt bei exit grün? Ich probiers mal. Danke. |
Re: Auf Textdatei zugreifen
Muss ich eigentlich bei Klausns Vorschlag die Datei noch closen, bevor ich mit exit die Proc verlasse?
|
Re: Auf Textdatei zugreifen
Nein, eigentlich nicht, da ein Öffnen ja fehlgeschlagen ist (IOResult <> 0)
Grüße Klaus |
Re: Auf Textdatei zugreifen
Lieber Klaus,
deine Lösung funzt so, ich lasse meine Proc nun schon ziemlich lange laufen und es kommt keine Fehlermeldung mehr. Herzlichen Dank für deine Hilfe. Nette Grüße Markus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:09 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