Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
26. Mär 2007
Abgesehn davon, daß an dem Program rein garnichts geht und die CodeFormatierung grad noch so ansatzweise zu erkennen ist .... ähhhhhhh?
Also bei Beenden wirdja versucht 4 einträge zu speichern, selbst wenn das Array leer ist.
Wärend Len aber mit der tatsächlichen Zahl gepeichert wird.
- beim Auslesen kann da also nichts stimmen (Len <> gepeicherte Datensätze)
- gespeichert kann aber sowieso...
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
26. Mär 2007
Stream.Read/.Write sind doch bei dir so definiert?
Read(var Buffer; Count: Longint): Longint;
Write(const Buffer; Count: Longint): Longint;
Also dann sollte es doch funktionieren? :gruebel:
Hast du mal ein Testprogramm zur Verfügung?
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
26. Mär 2007
müßte stimmen
// Schreiben
Len := Length(T);
Stream.Write(Len, SizeOf(Len));
for I := 0 to Length(T) - 1 do
begin
Stream.Write(T.T, SizeOf(Word) * 3); // .T, .M und .J zusammen
Len := Length(T.Zh);
Stream.Write(Len, SizeOf(Len));
If Len > 0 Then Stream.Write(T.Zh, Len);
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
26. Mär 2007
Dann halt so?
Stream.Write(T.B, Len);
Aber wie schon mehrmals gefragt ... wie sieht denn die Definition deines Records aus?
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
26. Mär 2007
Nein, Read/Write nimmt verwendet Var/Const-Parameter (D7) und demnach nichts mit Addr und Co.
Weßhalb auch die Dereferenzierung im Ausgangspost falsch wäre.
Stream.Write(PChar(T.B)^, Len);
dat Rote muß weg, denn sonst kann es mit dem Auslesen nicht klappen ... da ja schon was Falsches in der Datei stünde.
PS: hattest du eigentlich mal in die Datei geschaut, also ob da überhaupt was...
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
25. Mär 2007
Len := Length(T);
Stream.Write(Len, SizeOf(Len));
for I := 0 to Length(T) - 1 do
begin
Len := Length(T.B);
Stream.Write(Len, SizeOf(Len));
Stream.Write(PChar(T.B), Len);
sieht eigentlich OK aus, wenn B der String ist
er speichert die Arraylänge und dann jeweils die Länge von B, sowie dessen Inhalt?
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
25. Mär 2007
Oder die Datei bis zum Dateiende (EndOfFile) abarbeiten und jeweils den grad gelesenen Eintrag anhängen,
aber du hast doch die Anzahl in der Datei abgespeichert?
Also brauchst du die doch einfach nur auszulesen. :gruebel:
Stream.Read(Len, SizeOf(Len));
SetLength(T, Len);
for I := 0 to Length(T) - 1 do
begin
Stream.Read(Len, SizeOf(Len));