![]() |
{$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:
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?)
{$I-} // <---
rewrite(Dateivariable); {$I+} // <--- Ciao Frederic Edit: @Ultimator: Da sind mehr Sonderzeichen im Titel :wink: |
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:
|
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: |
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:
Es bestünde dann auch noch die Möglichkeit das ganze, statt mit {$I...}, über try...except / try...finally abzusichern.
{$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; [edit] genau, solange der eventuelle Fehler nicht mittels IOResult abgerufen und dadurch zurückgesetzt wird, dann machen die nachfolgenden Dateifunktionen nichts mehr. |
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 |
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 ;-)) |
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 |
Re: {$I-} bei rewrite
Aber IOResult kennt doch das Schuldelphi?
|
Re: {$I-} bei rewrite
Hi!
In den letzten 1,5 Jahren mal noch nicht. Und ich befürchte, es bleibt dabei. Ciao Frederic |
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. |
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