AGB  ·  Datenschutz  ·  Impressum  







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

ReWrite() findet kein File?

Ein Thema von TForm1 · begonnen am 10. Mai 2014 · letzter Beitrag vom 11. Mai 2014
Antwort Antwort
Seite 3 von 3     123   
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#21

AW: ReWrite() findet kein File?

  Alt 11. Mai 2014, 09:13
Danke für die Beispiele, jetzt ist alles etwas klarer .
Was ich noch nicht wusste, bzw nur am Rande mal gesehen habe, ist, dass man Records auch mit Funktionen und Prozeduren ausstatten kann; das werde ich definitiv des öfteren nutzen können. 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?
Meines Wissens geht file of nur bei Records, nicht bei Klassen. Und wie Sir Rufo schon sagte, es werden nur die Felder gespeichert. Dasselbe bei Item[I] := Item[J]. Bei Klassen bräuchte man da ein Assign Item[I].Assign(Item[J]), hätte statt dem Array wohl eher eine TObjectlist und würde zum Beispiel in einem FileStream speichern.
  Mit Zitat antworten Zitat
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
TForm1

Registriert seit: 11. Jan 2014
128 Beiträge
 
FreePascal / Lazarus
 
#23

AW: ReWrite() findet kein File?

  Alt 11. Mai 2014, 11:33
OK, dann weiß ich jetzt deutlich mehr als vorher!
Eine Frage habe ich aber noch: Sollte man besser eine TObjectList für Klassen- Objekte verwenden und dann entsprechend casten und was macht das dann im Unterschied zu einer TList?
Der Fehler sitzt immer vor dem Computer...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: ReWrite() findet kein File?

  Alt 11. Mai 2014, 11:38
Es kommt drauf an, was man will.
Eine TList ist ja nur eine strunzdoofe Pointer-Liste.
Bei der TObjektList kann man der Liste dagegen auch die Verwaltung der Objekte übergeben. (z.B.: Wenn Eintrag gelöscht wird, dann gib automatisch das Objekt frei)

Und bei einer generischen TList/TObjektList kann man den Cast automatisch integrieren und den Compiler eine Typprüfung vornehmen lassen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 20:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz