AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

E/A-Fehler in Wrapperklasse

Ein Thema von uligerhardt · begonnen am 21. Feb 2012 · letzter Beitrag vom 22. Feb 2012
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.540 Beiträge
 
Delphi 12 Athens
 
#1

AW: E/A-Fehler in Wrapperklasse

  Alt 22. Feb 2012, 08:59
Bei dem <>fmClose muß nur uf jeden Fall die File-Variable initialisiert sein, bevor das FileClose auch nur daran denken könnte man dranzukommen.

Es ist oftmals zwar eher unwahrscheinlich, daß ein "billiges" Create (inherited) fehlschlagen kann, aber dennoch würde AssignFile(f, AFileName); noch davor hingehören.
AssignFile selber macht noch keine Dateizugriffe, es initialisiert nur die Variable und legt den Dateinamen (als ShortString) darin ab.
Ohne sichere Initialisierung wäre die Prüfung auf fmInput, fmOutput und fmInOut noch am Sichersten.
Im Falle des Objektes und da dessen Speicher automatisch mit 0/nil initialisiert wird, könnte man auch auf if (TFileRec(f).Mode <> 0) or (TFileRec(f).Mode <> fmClosed) then prüfen und das AssignFile so belassen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.749 Beiträge
 
Delphi 2007 Professional
 
#2

AW: E/A-Fehler in Wrapperklasse

  Alt 22. Feb 2012, 09:07
Bei dem <>fmClose muß nur uf jeden Fall die File-Variable initialisiert sein, bevor das FileClose auch nur daran denken könnte man dranzukommen.
Die Dateivariable ist als Member einer Klasse ja null-initialisiert. Das ist also kein Problem.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.540 Beiträge
 
Delphi 12 Athens
 
#3

AW: E/A-Fehler in Wrapperklasse

  Alt 22. Feb 2012, 09:13
fmClose ist aber nicht 0
Und der Delphi-Code prüft auch nicht auf 0.

fmClose und Co. sind "komische" Magicnumbers. (als Enum, mit fmClose=0 wären die praktischer gewesen)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#4

AW: E/A-Fehler in Wrapperklasse

  Alt 22. Feb 2012, 09:20
fmClose und Co. sind "komische" Magicnumbers. (als Enum, mit fmClose=0 wären die praktischer gewesen)
Nein wäre es nicht, weil man dann nicht unterscheiden könnte, ob schon ein assign gemacht wurde oder nicht!
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.749 Beiträge
 
Delphi 2007 Professional
 
#5

AW: E/A-Fehler in Wrapperklasse

  Alt 22. Feb 2012, 09:43
fmClose und Co. sind "komische" Magicnumbers. (als Enum, mit fmClose=0 wären die praktischer gewesen)
Nein wäre es nicht, weil man dann nicht unterscheiden könnte, ob schon ein assign gemacht wurde oder nicht!
Stimmt auch wieder. Mir fällt zwar auf die Schnelle kein Grund ein, warum ich das wissen wollte, aber da gibt es bestimmt "kreativere" Menschen.

Übrigens ist mir gerade beim Betrachten der Implementation von AssignFile (also System._Assign) ein Lapsus aufgefallen: Die Länge des übergebenen Strings wird nicht geprüft. Führt man folgende Routine aus
Delphi-Quellcode:
procedure Test2;
var
  Opfer: ShortString;
  f: TextFile;
begin
  Opfer := StringOfChar('.', 255);
  AssignFile(f, StringOfChar('X', 500));
end;
so verstümmelt der Aufruf von AssignFile kommentarlos die Variable Opfer. Klar ist der übergebene String kein gültiger Dateiname, aber eine Exception wäre da wohl schon angebracht.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.749 Beiträge
 
Delphi 2007 Professional
 
#6

AW: E/A-Fehler in Wrapperklasse

  Alt 22. Feb 2012, 09:29
fmClose ist aber nicht 0
Uppsi. Wer rechnet denn mit sowas?
fmClose und Co. sind "komische" Magicnumbers. (als Enum, mit fmClose=0 wären die praktischer gewesen)
Muss von mir aus kein Enum sein, aber der Ordinalwert 0 wäre vielleicht schon günstig gewesen. Naja gut, dann halt if (TTextRec(FFile).Mode <> 0) and (TTextRec(FFile).Mode <> fmClosed) then .
Uli Gerhardt
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:00 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