Delphi-PRAXiS

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:

fkerber 28. Okt 2004 21:56

Re: {$I-} bei rewrite
 
Hi!

Jepp, das Problem ist:
Schon das oben erwähnte verstehen 80% meines Kurses nicht. Und das ist dann schon schwierig da irgendwie tief in die Materie einzusteigen. Es gleicht im Moment eher "Abtippen, was der Lehrer sagt"


Ciao Frederic

Christian Seehase 28. Okt 2004 22:00

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

Zitat:

Zitat von fkerber
Auf jeden Fall wäre die einzige Möglichkeit, da größeren Schaden abzuwenden die folgende:

Delphi-Quellcode:
{$I-}   // <---
rewrite(Dateivariable);
{$I+}   // <---

Zitat:

Zitat von OH zu IOCHECKS
Ist der Schalter $I deaktiviert, muß die E/A-Operation durch einen Aufruf von IOResult auf Fehler geprüft werden.

Da stellt sich mir doch fast die Frage, ob eure Lehrkraft das Hauptamtlich macht, oder als Vertretung :gruebel:

fkerber 28. Okt 2004 22:02

Re: {$I-} bei rewrite
 
Hi!

Ja, sie macht es hauptamtlich und hat auch eigentlich einiges an Erfahrung mit Programmierung (arbeite noch in verschiedenen Projekten mit ihm zusammen.)

Ich denke, es liegt wirklich da dran, dass es sonst zu kompiziert würde. Kann das sein?


Ciao Frederic

mirage228 28. Okt 2004 22:06

Re: {$I-} bei rewrite
 
Zitat:

Zitat von fkerber
Hi!

Ja, sie macht es hauptamtlich und hat auch eigentlich einiges an Erfahrung mit Programmierung (arbeite noch in verschiedenen Projekten mit ihm zusammen.)

Ich denke, es liegt wirklich da dran, dass es sonst zu kompiziert würde. Kann das sein?


Ciao Frederic


Also, den Schülern in der 12 zuzumuten "if IOResult = 0" abzufragen, sollte wohl kein Problem darstellen (hoffentlich :mrgreen: )

mfG
mirage228

P.S.: Wir machen jetzt gerade "Stifte und Mäuse 2.32" in Delphi :mrgreen: - Die Unit ist einfach nur arm :wall:

fkerber 28. Okt 2004 22:11

Re: {$I-} bei rewrite
 
Hi!

Das Problem ist wohl, dass sie auch einfach nur hinschreiben würden, aber nicht verstehen. Es ging heute darum das Speichern per File zu implementieren und manche haben nur das AssignFile geschrieben und dann gefragt, warum nix in der Datei drinsteht.

Ciao Frederic


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:46 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