1Danke
ERLEDIGT
JA
JA
ANTWORTEN
3
3
ZUGRIFFE
911
911
EMPFEHLEN
-
Hallo zusammen.
Ich greife in meinem Programm auf Daten einer Textdatei zu.
Code :1 2 3 4 5 6 7
if FileExists('file.txt') then begin s:=Tstringlist.Create; s.LoadFromFile('file.txt'); // Machwas mit S ... s.Destroy; end;
Das funktioniert eigentlich ganz normal.
Wenn ich das Programm aber mehrmals, gleichzeitig/schnell hintereinander starte, dann stürzen manchmal einige der gestarteten Programme mit dem Fehlerfenster, das aus der Datei nicht zu lesen sei, ab.
Ich bin eigentlich der Meinung, daß die Datei-Zugriffe innerhalb der Bibliotheken abgesichert sind. Außerdem will ich ja nur lesen. Nach s.LoadfromFile sollte alles, was mit dem file zu tun hat, eigentlich erledigt sein (z.B. Datei geschlossen).
Woran kann es denn liegen?
Vielleicht bitte mit etwas Code, wie man den Fehler abfangen kann (a lá "procedure WarteBisFileFreiIst('file.txt') ;")
Vielen Dank.
jrx
-
06.06.11 09:53 #2
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
Ich habe keine Ahnung von Pascal direkt (ist schon sehr lange her).
Grundsätzlich ist unter Windows (du benutzt doch Windows?) das Problem, das Programme nicht gleichzeitig auf bereits geöffnete Dateien zugreifen können.
Du müßtest das Öffnen bzw. Laden einfach probieren und wenn es fehlschlagt aufgrund eines SHARING Fehlers, dann kurz warten und es einfach nochmal versuchen.
Pascal hat doch try catch Anweisungen, oder?!
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Hallo,
Ja ich schreibe für Windows (XP).
Hier meine, zugegebenermaßen etwas unglückliche Lösung.
Zum Glück ist der Fehler in meinem Programm eher kosmetischer Natur.
Wenn in meiner Settingsdatei keine Daten gefunden werden, verwendet das Programm sinnvolle Defaults.
Allerdings wird ja in den Quellen für LoadFromFile schon eine try ... finally Abfrage gemacht.
Deshalb finde ich es ja nun DoppelGemoppelt.
Code :1 2 3 4 5 6 7 8 9 10 11
if FileExists('file.txt') then begin s:=Tstringlist.Create; try s.LoadFromFile('file.txt'); except s.text:='error'; end; // Machwas mit S ... s.Destroy; end;
Wenn ich nun eventuell im Except auf einen Programmpunkt vor try springen würde, riskiere ich Spaghetti-Code und fange mir vielleicht eine Endlosschleife ein, wo ich Abbruchkriterien definieren muß...
Vielleicht kennt ja noch jemand eine elegante Lösung für mein Problem.
jrx
-
07.06.11 16:06 #4
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
Die grundsätzliche Vorgehensweise ist diese:
Siehe auch http://support.microsoft.com/kb/316609/deCode :1 2 3 4 5 6 7 8 9 10 11 12
tries := 0 maxRetries := 20 repeat try ... break except on ErrorSharingViolation do Sleep 100ms; tries := tries + 1 else raise end until tries >= maxRetries
Du mußt also 1) du Anzahl der Versuche auf ein Maximum begrenzen und 2) sicherstellen, das es sich bei dem Fehler um eine ErrorSharingViolation bzw. keinen fatalen Fehler handelt (ich weiß nicht wie du an die genaue Fehlerursache kommst, evlt. hat die Ausnahme eine Eigenschaft dafür).
GrußGeändert von deepthroat (07.06.11 um 16:08 Uhr)
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
Ähnliche Themen
-
Probleme beim Lesen von einer Textdatei
Von WaZZkeSS im Forum Flash PlattformAntworten: 12Letzter Beitrag: 31.05.10, 15:51 -
ohne PHP CGI und CO aus einer textdatei lesen
Von JamesT im Forum Coders TalkAntworten: 1Letzter Beitrag: 11.05.07, 10:49 -
Wert aus einer Textdatei lesen
Von gabrielgsell im Forum Visual Basic 6.0Antworten: 5Letzter Beitrag: 24.12.06, 10:48 -
HTML Tags als Text ausgeben beim lesen aus Textdatei?!
Von Blaubmania im Forum PHPAntworten: 4Letzter Beitrag: 05.01.05, 10:44 -
[MX] variablen aus einer durch PHP erzeugten Textdatei lesen
Von Borderlinegirl im Forum Flash PlattformAntworten: 1Letzter Beitrag: 06.07.03, 07:23





Zitieren
Login





