Delphi-PRAXiS
Seite 2 von 2     12

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   "Stream Lesefehler" bei Laden via TFileStream (https://www.delphipraxis.net/167218-stream-lesefehler-bei-laden-via-tfilestream.html)

Gashunkification 19. Mär 2012 08:33

AW: "Stream Lesefehler" bei Laden via TFileStream
 
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 :thumb:
Hier kann nun also geschlossen werden ^^


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:44 Uhr.
Seite 2 von 2     12

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz