Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Dateizugriffsproblem mit Apache-Server (savetofile ) (https://www.delphipraxis.net/92477-dateizugriffsproblem-mit-apache-server-savetofile.html)

brose 20. Mai 2007 19:54


Dateizugriffsproblem mit Apache-Server (savetofile )
 
Guten Abend zusammen,

mein Programm kommuniziert über die serielle Schnittstelle mit einer Gefahrenmeldeanlage. Die Daten werden aufbereitet, angezeigt usw., in ein Memofeld eingetragen und sollen über die folgende Prozedur in eine Datei gespeichert werden. Das ganze wiederholt sich ca. alle 2 Sek. (Programm fragt ab). Diese Datei befindet sich in dem freigegebenen Ordner eines Apache-Servers. Über Intranet und MS-IE kann man sich die Datei (die dann im wesentlichen dem Memo-Feld entspricht) anschauen und so den Zustand erfahren.

Delphi-Quellcode:
procedure TForm1.Exportieren;
var str: TStrings;
i : integer;
begin
   str := TStringlist.create;
   str.loadfromfile('header.html');
   str.add('<font face="Verdana" size="2">');
   str.add('[b]'+datetostr(now)+ ' - ' + timetostr(now) + '[/b]
');
   for i := 1 to 8 do if ((bereichaktiv[i])AND(bereich_text[i] <> '')) then str.add(bereich_text[i]+': '+zustandstext(bereichszustand[i])+'
') else if bereichaktiv[i] then str.add('Bereich '+inttostr(i)+': '+zustandstext(bereichszustand[i])+'
');
   str.add('
');
   for i := 0 to memo1.lines.count - 1 do str.add(memo1.lines[i]+'
');
   str.add('</td></tr></table></body></html>');
   str.savetofile(serverpfad + 'meldungen.html');
   str.free;  
end;
Die Html-Datei hat im Header einen Reload-Eintrag, sodass sie alle 2 Sek. automatisch neu geladen wird. Läuft das nun eine gewisse Zeit, kommt es zu der Situation, an der wahrscheinlich Zugriff und Speichervorgang gleichzeitig geschehen, sodass es einen Fehler gibt und das Programm abstürzt (windows-Meldung "sowieso.exe hat ein Problem festgestellt und muss beendet werden....").


So ähnlich werden auch die Ereignisse (und die empfangenen Daten für Debug-Zwecke) in PRotokolldateien abgespeichert (so ähnlich = stringlist und savetofile). Auch hier stürzt das Programm meistens ab, wenn ich die Datei mit dem Texteditor aus dem Explorer heraus öffne.

Wie kann ich das Problem lösen?? :gruebel:

Vielen Dank schonmal.

Gruß
Sebastian

RWarnecke 20. Mai 2007 21:35

Re: Dateizugriffsproblem mit Apache-Server (savetofile )
 
1. Möglichkeit:
Du prüfst in Deinem Delphiprogramm ab, ob die Datei im Zugriff ist oder nicht. Wenn die Datei im Zugriff ist, dann speichere die Werte beim nächsten Durchlauf.

2. Möglichkeit:
Du speicherst die Datei immer und fragst auf Deiner Intranet-Seite ab, ob es eine neue Datei gibt.

3. Möglichkeit:
Du erstellst hier in Delphi ein WEb-Interface, welches Dir beides machen kann. Es zeigt Dir die Sachen im Browser und speichert es. Damit gehst Du dem Konflikt aus dem Weg mit dem Speichern.

SirThornberry 20. Mai 2007 21:37

Re: Dateizugriffsproblem mit Apache-Server (savetofile )
 
schaut dir mal try-except an. Damit kann man Fehler behandeln.

brose 20. Mai 2007 22:32

Re: Dateizugriffsproblem mit Apache-Server (savetofile )
 
Hallo,

danke für die Antworten.

Ich habe mich für RWarneckes erste Variante zusammen mit http://www.dsdt.info/tipps/?id=360 entschieden.

Falls die Datei belegt ist, wird in eine temp-Datei geschrieben. Mal sehen, wie sich die Sache entwickelt und ob es dem Praxistest standhält. :)

Gruß
Sebastian


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:21 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