Thema: Delphi Collections speichern

Einzelnen Beitrag anzeigen

CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#1

Collections speichern

  Alt 9. Jan 2005, 19:38
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
  Mit Zitat antworten Zitat