Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi {$I-} bei rewrite (https://www.delphipraxis.net/32860-%7B%24i-%7D-bei-rewrite.html)

fkerber 28. Okt 2004 21:04


{$I-} bei rewrite
 
Hi!

Wir besprechen in der Schule (GK Info 12) gerade den Datentyp file.
Dabei hat unser Info-Lehrer gemeint, dass Delphi äußerst allergisch reagieren würde, falls bei Rewrite etwas schief geht (z.B. die Datei nicht da ist oder wie auch immer).
Auf jeden Fall wäre die einzige Möglichkeit, da größeren Schaden abzuwenden die folgende:

Delphi-Quellcode:
{$I-}   // <---
rewrite(Dateivariable);
{$I+}   // <---
Mir geht es halt eben in erster Linie um die markierten Compiler-Switches. Sind sie wirklich erforderlich? Was kann sonst passieren? (Sie schalten Delphis Fehlerbehandlung aus, oder?)

Ciao Frederic

Edit: @Ultimator: Da sind mehr Sonderzeichen im Titel :wink:

_Sebastian_ 28. Okt 2004 21:15

Re: {$I-} bei rewrite
 
Ich denke nicht das die erforderlich sind.. Ich hab schon soo oft daten geöffnet, beschrieben usw und mir ist noch nie was passiert.
Soweit ich das aus der hilfe lese unterdrückt dir compilerschalter die Fehlermeldung die auftritt wenn die datei nicht vorhanden ist!?

Naja würd ich sowieso immer vorher überprüfen ob die datei vorhanden ist..

Hier nochma der auszug ausser delphi hilfe:
Zitat:

Anmerkungen

Mit der Direktive $I wird die automatische Code-Generierung aktiviert bzw. deaktiviert, die nach jedem Aufruf einer E/A-Prozedur das Ergebnis überprüft. Eine ausführliche Beschreibung der E/A-Prozeduren finden Sie in der Delphi-Sprachreferenz. Siehe Standardroutinen und E/A. Wenn eine E/A-Prozedur bei aktiviertem $I-Schalter ein Ergebnis ungleich 0 zurückgibt, führt dies zu einer EInOutError-Exception (bzw. zum Programmabbruch, wenn die Exception-Behandlung nicht aktiviert ist). Ist der Schalter $I deaktiviert, muss die E/A-Operation durch einen Aufruf von IOResult auf Fehler geprüft werden.

fiasko 28. Okt 2004 21:18

Re: {$I-} bei rewrite
 
Hallo,

wenn die nicht abgeschalten werden dann wird der Nutzer mit einem RunTimer Error geägert (sicher irgend eine Exception heutzutage... ich schreibe hier mit meinem Borland Pascal 7.1 wissen :stupid:). Die IO-Prüfungen kann man auch irgendwo in den Compileroptionen abschalten. wenn die Abgeschalten sind kann/muß man über IOResult abfragen ob ein Fehler aufgetreten ist. Wenn man das nicht macht, dann verlaufen weitere Operationen ins leere (glaube nur nachdem ein Fehler auftrat).

Ist aber nicht mehr ganz Zeitgemäß :shock:

himitsu 28. Okt 2004 21:32

Re: {$I-} bei rewrite
 
Also ich hab da bis jetzt auch noch keine Probleme gehabt,, aber wenn du schon mit {$I-} die fehlerbehandlung abschaltest, dann solltest du auch nacher selber über IOResult prüfen, ob auch alles gutgegangen ist.


Delphi-Quellcode:
{$I-}
Rewrite(F);
{$I+}
if IOResult = 0 then begin
  // schreib was ...
  CloseFile(F);
end;

{$I-}
Rewrite(F);
{$I+}
if IOResult = 0 then begin
  // schreib was ...
  CloseFile(F);
end else begin
  // 'ne Fehlermeldung
end;
Es bestünde dann auch noch die Möglichkeit das ganze, statt mit {$I...}, über try...except / try...finally abzusichern.


[edit]
genau, solange der eventuelle Fehler nicht mittels IOResult abgerufen und dadurch zurückgesetzt wird, dann machen die nachfolgenden Dateifunktionen nichts mehr.

fkerber 28. Okt 2004 21:34

Re: {$I-} bei rewrite
 
Hi!

Danke, dass das auch mit Try-Except geht, dachte ich mir, aber ich glaube diese Wörter gibt es in Schul-Delphi nicht :wink:
Demnach darf ich es dann acuh nicht verwenden.

Ciao Frederic

Christian Seehase 28. Okt 2004 21:36

Re: {$I-} bei rewrite
 
Moin Zusammen,

wobei ich eine Fehlervermeidung, einer Fehlerunterdrückung vorziehe.
Soll in diesem Falle heissen:
Erst prüfen, ob die Datei existiert (z.B. mit FileExists), statt eine evenuelle Exeption abzufangen.

(dass die Datei dann vielleicht schreibgeschützt ist, ist dann wieder eine andere Sache ;-))

fkerber 28. Okt 2004 21:38

Re: {$I-} bei rewrite
 
Hi!

@Christian:
Das ist im Prinzip das Paradoxe: Solche Sachen wie FileExists oder ähnliches werden einfach gar nicht erwähnt und wie gesagt, dann dürfen sie auch nicht verwendet werden.

Ciao Frederic

himitsu 28. Okt 2004 21:43

Re: {$I-} bei rewrite
 
Aber IOResult kennt doch das Schuldelphi?

fkerber 28. Okt 2004 21:46

Re: {$I-} bei rewrite
 
Hi!

In den letzten 1,5 Jahren mal noch nicht. Und ich befürchte, es bleibt dabei.


Ciao Frederic

himitsu 28. Okt 2004 21:50

Re: {$I-} bei rewrite
 
als {$I-} ohne IOResult, sowas nenn ich strafbar ... die sollte man mal verklagen :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz