Hi,
ich habe für das Speichern einer Profile mir eine Collection angelegt, wo jedes Collection-Item die gewünschten Daten enthält. Für das Speichern und Laden verwende ich Streams. Dafür sehen meine Methoden folgendermaßen aus:
Delphi-Quellcode:
procedure TMyClass.LoadProfiles;
var
fProfileData: TFileStream;
iCount: Integer;
idx: Integer;
aItem: TMyProfile;
begin
{Sicherheitsüberprüfungen}
if FFileName = '' then Exit;
if not FileExists(FFileName) then begin
raise EInOutError.Create(szFileMustExists);
end;
{Profile laden}
fProfileData := TFileStream.Create(FFileName, fmOpenRead);
try
fProfileData.Read(iCount, sizeof(Integer));
for idx := 0 to iCount do begin
{Collection-Item erstellen und zur Collection hinzufügen}
aItem := TXcopyProfile.Create(FProfiles);
fProfileData.Read(aItem, sizeof(TMyProfile));
end;
finally
fProfileData.Free;
end;
end;
procedure TMyClass.SaveProfiles;
var
fProfileData: TFileStream;
idx, iCount: Integer;
aItem: TMyProfile;
begin
if FFileName = '' then Exit;
{Profile speichern}
fProfileData := TFileStream.Create(FFileName, fmCreate);
try
iCount := FProfiles.Count;
fProfileData.Write(iCount, sizeof(Integer));
for idx:=0 to iCount-1 do begin
{Einzelne Collection-Items schreiben}
aItem := (FProfiles.Items[idx] as TMyProfile);
fProfileData.Write(aItem, sizeof(TMyProfile))
end;
finally
fProfileData.Free;
end;
end;
Angenommen beim Starten ist die gesamte Collection leer. Und wenn ich jetzt zur Laufzeit ein Item hinzufüge, wird das auch richtig angezeigt.
Beim nächsten Start (also nach dem Speichern und dem Neu Laden der Collection) jedoch gibt es statt einem Item zwei und beide enthalten scheinbar keine Daten (sind also leer).
Woran liegt das? Was habe ich beim Laden/Speichern gemacht?
Chris