Anstelle von 4096 habe ich schon andere Werte probiert.
Code: Alles auswählen
type
TDatensatz = record
ID: integer;
Name: ansistring;
end;
TDatenArray = array of TDatensatz;
procedure TForm1.Save2Click(Sender: TObject);
var
Daten: TDatenArray;
Stream: TFileStream;
Writer: TWriter;
i: integer;
Len: longint;
begin
SetLength(Daten, 4);
Daten[0].ID := 1;
Daten[0].Name := 'erster Name';
Daten[1].ID := 2;
Daten[1].Name := '';
Stream := TFileStream.Create(filename2, fmCreate);
Writer := TWriter.Create(Stream, 4096);
try
Len := Length(Daten);
Writer.WriteInteger(Len);
for i := 0 to Len - 1 do begin
Writer.WriteInteger(Daten[i].ID);
Writer.WriteString(Daten[i].Name);
end;
finally
Writer.Free;
Stream.Free;
end;
end;
procedure TForm1.Load2Click(Sender: TObject);
var
Daten: TDatenArray;
Stream: TFileStream;
Reader: TReader;
i: integer;
Len: longint;
begin
Stream := TFileStream.Create(filename2, fmOpenRead);
Reader.Create(Stream, 4096); // Hier knallt es
try
Len := Reader.ReadInteger;
SetLength(Daten, Len);
for i := 0 to Len - 1 do begin
Daten[i].ID := Reader.ReadInteger;
Daten[i].Name := Reader.ReadString;
end;
finally
Reader.Free;
Stream.Free;
end;
for i := 0 to Length(Daten) - 1 do begin
ShowData(Daten[i]);
end;