Einzelnen Beitrag anzeigen

Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#22

AW: ReWrite() findet kein File?

  Alt 11. Mai 2014, 11:09
[EDIT] Ich weiß jetzt woran es lag, und zwar waren meine Records noch leer bzw. noch keine Variablen darin, da ich das später machen wollte. Wenn ich testweise eine Variable deklariere, funktioniert es. Warum macht es beim Schreiben der Datei etwas aus, wenn der Record noch keine Daten enthält? Im Grunde genommen ist das File beim Erstellen ja auch leer, oder?
Dass das Record leer war, ist genau das Problem. Wenn du ein Rewrite() auf eine file of XYZ Variable machst, dann ist Rewrite() keine der Funktionen, die du in systemh.inc siehst (zumindest im Vordergrund), sondern der Compiler ändert dies intern zu fpc_rewrite_typed(filevar, sizeof(XYZ)) (deklariert in compproc.inc). Dieses ruft dann Rewrite(var f: File; l: longint) auf (deklariert in file.inc), in dem widerum l explizit auf 0 geprüft wird. In dem Fall wird IOResult auf 2 gesetzt und dann eben eine Exception ausgelöst, falls IO-Exceptions aktiviert sind.

Eine Blöde Frage: Wenn man Records als Datentypen mit Prozeduren speichern kann, kann man dann auch Klassen als Typen in typisierten Files speichern (in der Art: file of TMyClass)? Wahrscheinlich doch nicht (habe es jedenfalls noch nie gesehen), oder?
Sagen wir mal so... man könnte sowas durchaus implementieren, aber dann ist wiederum die Frage welchen Sinn das hätte. Außerdem kannst du zum Speichern/Laden von Klassen (zumindest, wenn du published Properties verwendest) die entsprechenden Writer-/Reader-Klassen verwenden, welche zum Beispiel auch von Delphi und Lazarus für die Formulardateien verwendet werden.

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat