ich versuche Datensätze, die in einer ObjectList schlummern und lediglich je aus einem 1 String und 2 Integerwerte per Filestream zu speichern und anschließend wieder aus dem Filestream laden und die Objectliste mit den minimal befüllten Objekten zu befüllen.
Nur hab ich den Eindruck das irgendwas nicht wirklich funktioniert beim Laden.
Mein Ansatz für das speicher
Code: Alles auswählen
procedure TForm2.ListeSpeichern;
var
Zieldaten: TFileStream;
Groesse : Integer;
I : Integer;
Anzahl : Integer;
begin
Zieldaten := TFileStream.Create('Basis.dat', fmCreate);
try
//Anzahl vorhandener Datensätze in Liste als 1. Wert der Datei schreiben
Zieldaten.Position :=0;
Anzahl:=lBasisListe.Count-1;
Zieldaten.WriteBuffer(IntToStr(Anzahl),Length(IntToStr(Anzahl)));
//Datensätze schreiben
For I:=0 to Anzahl do begin
BasisEinheit := lBasisListe.Items[i] as TBasisEin;
Zieldaten.Position := i+1;
//Name (ist ein String)
Zieldaten.WriteBuffer(BasisEinheit.Name,Length(BasisEinheit.Name));
//Maximale Felder pro Runde (Ist ein Integerwert)
Zieldaten.WriteBuffer(IntToStr(BasisEinheit.MaxBewegung),BasisEinheit.MaxBewegung);
//Maximale Aufklärungsreichweite (Ist ein Integerwert)
Zieldaten.WriteBuffer(IntToStr(BasisEinheit.MaxRecon),BasisEinheit.MaxRecon);
end;
finally
FreeAndNil(Zieldaten);
end;
end;
Code: Alles auswählen
procedure TForm2.ListeLaden;
var
Zieldaten: TFileStream;
I,C : Integer;
s : String;
Anzahl : Integer;
begin
Zieldaten := TFileStream.Create('Basis.dat', fmOpenRead);
Try
//Anzahl der Datensätze lesen
Zieldaten.Position :=0;
Zieldaten.ReadBuffer(Anzahl,SizeOf(Anzahl));
//Datensätze lesen und Objecte und die Objectliste damit befüllen
For I:=0 to Anzahl-1 do
begin
Zieldaten.Position := i;
BasisEinheit := TBasisEin.create;
//Name (ist ein String)
Zieldaten.ReadBuffer(s,SizeOf(BasisEinheit.Name));
BasisEinheit.Name:=S;
//Maximale Felder pro Runde (Ist ein Integerwert)
Zieldaten.ReadBuffer(c,SizeOf(BasisEinheit.MaxBewegung));
BasisEinheit.MaxBewegung:=c ;
//Maximale Aufklärungsreichweite (Ist ein Integerwert)
Zieldaten.ReadBuffer(c,SizeOf(BasisEinheit.MaxRecon));
BasisEinheit.MaxRecon:=c;
//lBasisListe mit Object füllen
lBasisListe.Add(BasisEinheit);
end;
finally
FreeAndNil(Zieldaten);
end;
end;