Entwickler-Ecke

Dateizugriff - Speichern/Laden von typisierten Dateien


Uncle - Do 23.10.03 10:37
Titel: Speichern/Laden von typisierten Dateien
Hallo alle zusammen, ich bräuchte da wirklich mal ein wenig Hilfe. Ich habe mein Problem auf diese wenigen Zeilen reduziert und kann den Fehler nicht entdecken.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
Interface
..
type
  TDepp = class
    Name: string;
  end;
..
implementation
..
procedure save;
var
  d: TDepp;
  f: file of TDepp;
begin
  d:= TDepp.create;
  d.name:='f*** OFF!!!';
  assignfile(f,'c:\Test\Depp.dat');
  rewrite(f);
  write(f,d);
  closefile(f);
  d.free;
end;

procedure Load;
var
  d: TDepp;
  f: file of TDepp;
begin
  d:= TDepp.create; // offensichtlich optional ?!?
  assignfile(f,'c:\Test\Depp.dat');
  Reset(f);
  Read(f,d);
  showmessage(d.name); // -> Zugriffsverletzung, oder Ausgabe von ''
  CloseFile(f);
  d.free; // offensichtlich optional ?!?
end;


Das Interessante ist auch, dass er auch kompiliert, wenn ich in der Load-Prozedur gar keine d-Instanz instanziert habe! Die Ausgabe verändert sich ebenfalls nicht.
Ich habe es auch mit einem beschränktem String, char und integer unter TDepp probiert, aber die Ausgabe blieb dieselbe.

Ich bitte um möglichst schnelle Hilfe.
Vielen Dank im Vorraus!

Uncle

Moderiert von user profile iconKlabautermann: Delphi-Tags hinzugefügt.


Klabautermann - Do 23.10.03 10:46

Hallo,
ich Tippe mal drauf, dass das Problem ist, das du eine Klasse speichern willst. Der Typer dieser Lautet Pointer und somit speicherst du nur diesen. Da selbe gild übrigens auch für Strings Varialbler länge. Da dann Delphi die Blockgröße nicht bestimmen, und ihn somit nicht Typisiert speichern.

Ändere also dein

Delphi-Quelltext
1:
2:
3:
 TDepp = class 
    Name: string
  end;


in


Delphi-Quelltext
1:
2:
3:
tDepp = packed record
  Name : string[75];
end;


Ein Demo für das Arbeiten mit Typisierten Dateien kannst du übrigens hier [http://downloads.oitmann.de/samples] runterladen.

Gruß
Klabautermann


Delete - Do 23.10.03 17:31

Und hier gibt es eien eigene Klasse dafür mit Demo Anwendung: http://www.luckie-online.de/downloads/ -> TypedfilesClass.