tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von deepthroat
ERLEDIGT
JA
ANTWORTEN
3
ZUGRIFFE
911
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    jrx jrx ist offline Mitglied Bronze
    Registriert seit
    Aug 2005
    Beiträge
    41
    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
     

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    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.

  3. #3
    jrx jrx ist offline Mitglied Bronze
    Registriert seit
    Aug 2005
    Beiträge
    41
    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
     

  4. #4
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Die grundsätzliche Vorgehensweise ist diese:
    Code :
    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
    Siehe auch http://support.microsoft.com/kb/316609/de

    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)
    jrx bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

Ähnliche Themen

  1. Probleme beim Lesen von einer Textdatei
    Von WaZZkeSS im Forum Flash Plattform
    Antworten: 12
    Letzter Beitrag: 31.05.10, 15:51
  2. ohne PHP CGI und CO aus einer textdatei lesen
    Von JamesT im Forum Coders Talk
    Antworten: 1
    Letzter Beitrag: 11.05.07, 10:49
  3. Wert aus einer Textdatei lesen
    Von gabrielgsell im Forum Visual Basic 6.0
    Antworten: 5
    Letzter Beitrag: 24.12.06, 10:48
  4. Antworten: 4
    Letzter Beitrag: 05.01.05, 10:44
  5. [MX] variablen aus einer durch PHP erzeugten Textdatei lesen
    Von Borderlinegirl im Forum Flash Plattform
    Antworten: 1
    Letzter Beitrag: 06.07.03, 07:23