Einzelnen Beitrag anzeigen

Gashunkification

Registriert seit: 18. Mär 2012
9 Beiträge
 
#11

AW: "Stream Lesefehler" bei Laden via TFileStream

  Alt 19. Mär 2012, 08:33
Vielen Dank nochmal an alle und @Bummi
Das mache ich doch schon sowohl beim Schreiben als auch beim Lesen. Das war nicht das Problem.

Habe den Fehler nun gefunden (habe einmal strlngth und lngth vertauscht). Mit dem Code hier geht es jetzt:

Delphi-Quellcode:
procedure TListHandler.Load(const FilePath: String);
var
  F_Stream: TFileStream;
  lngth: Integer;
  strlngth: Integer;
  I: Integer;
  name, Info: String;
begin
  try
    F_Stream := TFileStream.Create(FilePath, fmOpenRead);

    F_Stream.ReadBuffer(lngth, SizeOf(lngth));
    List.Length := lngth;

    for I := 0 to List.Length - 1 do
    begin

      F_Stream.ReadBuffer(strlngth, SizeOf(strlngth));
      SetLength(Name, strlngth);
      F_Stream.ReadBuffer(Name[1], strlngth*SizeOf(Name[1]));
      Item.Name := Name;

      F_Stream.ReadBuffer(strlngth, SizeOf(lngth));
      SetLength(Info, strlngth);
      F_Stream.ReadBuffer(Info[1], strlngth*SizeOf(Info[1]));
      Item.Info := Info;

      F_Stream.ReadBuffer(lngth, SizeOf(lngth));
      Item.ID := lngth;

      List.Item[i] := Item;
    end;// for
  finally
    F_Stream.Free;
  end; // finally
end; // Load

// #############################################################################

// Save the whole List as it is to a pre-specified Filepath
procedure TListHandler.Save(const FilePath: String);
var
  F_Stream: TFileStream;
  lngth: Integer;
  strLngth: Integer;
  I: Integer;
begin
  try
    F_Stream := TFileStream.Create(FilePath, fmCreate);

    lngth := List.Length;
    F_Stream.WriteBuffer(lngth, SizeOf(lngth));
    for I := 0 to List.Length - 1 do
    begin

      strlngth := Length(List.Item[I].Name);
      F_Stream.WriteBuffer(strlngth, SizeOf(strlngth));
      F_Stream.WriteBuffer(List.Item[I].Name[1],
        strlngth*SizeOf(List.Item[I].Name[1]));

      strlngth := Length(List.Item[i].Info);
      F_Stream.WriteBuffer(strlngth, SizeOf(strlngth));
      F_Stream.WriteBuffer(List.Item[I].Info[1],
        strlngth*SizeOf(List.Item[I].Info[1]));

      lngth := List.Item[i].ID;
      F_Stream.WriteBuffer(lngth, SizeOf(lngth));
    end; // for

  finally
    F_Stream.Free;
  end;
end; // Save

Vielen Dank nochmals an alle Ihr habt mir sehr geholfen
Hier kann nun also geschlossen werden ^^
  Mit Zitat antworten Zitat