Exception bei TFileStream.Create auf chmod 000 abfangen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
redplug
Beiträge: 31
Registriert: So 22. Nov 2009, 20:35

Exception bei TFileStream.Create auf chmod 000 abfangen

Beitrag von redplug »

Hi,
Ich möchte die Exception die beim versuchten erstellen eines Streams auf eine Schreibgeschützte Datei entsteht abfangen.

Also habe ich das Probiert:

Code: Alles auswählen

try
    FileStream := TFileStream.Create(form1.SaveDialog1.FileName, fmCreate);
  except
    showmessage('dfgdfgdf');
    FreeAndNil(FileStream);
  end;
Ich bekomme aber immer noch die Exception 'Unknow' von Lazarus und das Programm hängt sich auf.
Ich bekomme auch kein showmessage gezeigt. Er geht gar nicht erst in den except block.
Woran kann das liegen?

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Exception bei TFileStream.Create auf chmod 000 abfangen

Beitrag von theo »

Erstens musst du unterscheiden, ob das Programm unter dem Debugger (in der IDE) oder ausserhalb resp. mit ausgeschaltetem Debugger läuft.
Dann könnte das freigeben von FileStream (FreeAndNil), welcher im Constructor einen Fehler geworfen hat, zu einem weiteren Fehler führen.

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Exception bei TFileStream.Create auf chmod 000 abfangen

Beitrag von monta »

Naja...bevor FreeAndNil einen fehler werfen könnte, müsste ja aber trotz allem die ShowMessage ausgelöst werden.

Die Frage, wie das Verhalten ohne Debugger ist, wäre allerdings interessant. Es gibt allerdings auch tieferliegende Fehler der Betriebssysetm-API, die nicht abgefangen werden können. Zumindest unter Windows gibt es nachweislich bei bestimmten API-Aufrufen einen bereits von der Api geworfenen Fehler, der nicht per try-except-block gefangen werden kann. Eventuell liegt das in diesem Fall auch so ähnlich unter Linux vor.

Unabhängig davon, ich würde vorher die Zugriffsrechte abfragen, siehe:
http://lazarus-ccr.sourceforge.net/docs ... ccess.html" onclick="window.open(this.href);return false;
Johannes

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Exception bei TFileStream.Create auf chmod 000 abfangen

Beitrag von theo »

monta hat geschrieben:Naja...bevor FreeAndNil einen fehler werfen könnte, müsste ja aber trotz allem die ShowMessage ausgelöst werden.
Tut ja auch, nur vorher kommt halt noch der GDB mit der originalen Exception Message aus dem "Create".
Ohne Debugger ist alles i.O. afaics.

redplug
Beiträge: 31
Registriert: So 22. Nov 2009, 20:35

Re: Exception bei TFileStream.Create auf chmod 000 abfangen

Beitrag von redplug »

Nein es weird nicht ausgelöst.
Egal ob mit oder ohne Debugger.
Das Programm im Debugger hängt sich auf.
Im Normalen betrieb kommt die Meldung:

Access violation.

Press Ok to ignore and risk data corruption.
Press Cancel to kill the programm.


Gibt es andere möglichkeiten um auf Schreibrecht zu prüfen?

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Exception bei TFileStream.Create auf chmod 000 abfangen

Beitrag von theo »

redplug hat geschrieben:Nein es weird nicht ausgelöst.
Egal ob mit oder ohne Debugger.
Bei mir geht das Lazarus 0.9.29 r22524M FPC 2.2.4 i386-linux-gtk 2 (beta)
redplug hat geschrieben: Gibt es andere möglichkeiten um auf Schreibrecht zu prüfen?
Da hat Monta schon einen Link dazu gepostet.

redplug
Beiträge: 31
Registriert: So 22. Nov 2009, 20:35

Re: Exception bei TFileStream.Create auf chmod 000 abfangen

Beitrag von redplug »

Es geht doch!
Im Debugger hängt sich das Progamm auf.
Aber wenn ich es fortsetze kommt die showmessage.
Im echten betrieb kam die exception nicht von TFileStream.Create sondern von FreeAndNil(FileStream);

Naja jetzt funktioniert es aber. :roll:

Antworten