Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Auf Textdatei zugreifen (https://www.delphipraxis.net/90141-auf-textdatei-zugreifen.html)

simjoh 12. Apr 2007 11:36


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:
reset(datei); {hier wird die Fehlermeldung ausgelöst}

sl := TStringList.Create;
try
  sl.LoadFromFile('c:\Textdatei.txt')
finally
  sl.free
end;

fileclose(datei);
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.

Wäre für jeden Tipp dankbar.

Herzliche Grüße

mkinzler 12. Apr 2007 11:37

Re: Auf Textdatei zugreifen
 
Nimm besser einen Stream

simjoh 12. Apr 2007 11:38

Re: Auf Textdatei zugreifen
 
Wie geht das? Wärst du so nett mir ein Beispiel zu geben?

Andidreas 12. Apr 2007 11:48

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

himitsu 12. Apr 2007 11:48

Re: Auf Textdatei zugreifen
 
Schau unter Delphi-Referenz durchsuchenreset, dort steht wie man diese Fehlermeldung unterdrückt.

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?

Andidreas 12. Apr 2007 11:51

Re: Auf Textdatei zugreifen
 
Zitat:

Zitat von himitsu
PS: was passiert eigentlich, wenn das andere Programm grade in die Datei schreiben will, wärend du sie geöffnet hast?

dann wird vermutlich das andere programm eine fehlermeldung kriegen!!!

Delphi-Quellcode:
FileClose(’C:\Temp\Test.txt’);
das da könnte evtl. auch helfen...
dadurch schließt du die datei wieder...
aber was beim anderen programm dadurch passiert... kp... müsstest du halt mal testen...

simjoh 12. Apr 2007 11:58

Re: Auf Textdatei zugreifen
 
Ich probiers gerade mal und schau mal was geht, danke für die Hilfe. Melde mich ggf nochmal.

himitsu 12. Apr 2007 12:00

Re: Auf Textdatei zugreifen
 
Zitat:

Zitat von Andidreas
dann wird vermutlich das andere programm eine fehlermeldung kriegen!!!

darauf wollte ich hinaus :zwinker:

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:

Zitat von Andidreas
Delphi-Quellcode:
FileClose(’C:\Temp\Test.txt’);

:shock: > Delphi-Referenz durchsuchenFileClose ... das wird die Dateivarable verlangt und das macht er schon richtig

simjoh 12. Apr 2007 12:04

Re: Auf Textdatei zugreifen
 
Hab jetzt mal

Delphi-Quellcode:
{$I-}
  if IOResult <> 32 then
  begin

    Reset(Datei[1]);

  end
  else
    exit;
  {$I+}
probiert. Merkwürdigerweise ist ein eingefügter Haltepunkt bei "exit" grün. Kommt das Prog dort nie hin?

simjoh 12. Apr 2007 12:16

Re: Auf Textdatei zugreifen
 
Habs gerad probiert, funzt nett.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:09 Uhr.
Seite 1 von 2  1 2      

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