Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: bei string in TFileStream kommt 1 Zeichen zu wenig an...

  Alt 23. Mär 2010, 07:32
Und dann noch zwei kleine praktische Methoden als Class Helper für TStream und schon sieht das nach was aus:
Delphi-Quellcode:
Type
  TStringReadWriteHelper = Class Helper for TStream
  public
    Procedure WriteString (const aString : String);
    Procedure ReadString (Var aString : String);
  End;

Procedure TStringReadWriteHelper.WriteString (const aString : String);
Begin
  Write(Length (aString), SizeOf (Integer));
  Write(aString[1], Length (aString));
End;

Procedure TStringReadWriteHelper.ReadString (Var aString : String);
Var
  len : Integer;

Begin
  Read(len , SizeOf (Integer));
  SetLength (aString, len);
  Read (aString[1], len);
End;
Und nu:
Delphi-Quellcode:
procedure TForm1.Save(path: string);
var f:TFileStream;
    x,y:integer;
begin
  f:=TFileStream.Create(path,fmcreate);
  f.WriteBuffer(High(AllTitel),SizeOf(integer));
  for x:=0 to High(AllTitel) do begin
    WriteString(AllTitel[x].Titel);
    WriteString(AllTitel[x].Name);
    WriteString(AllTitel[x].Pfad);
    WriteString(AllTitel[x].Genre);
    WriteString(AllTitel[x].Jahr);
    WriteString(AllTitel[x].Kommentar);
    WriteString(AllTitel[x].Laenge);
    WriteString(AllTitel[x].Album);
  end;
  f.Free;
end;

procedure TForm1.Load(path: string);
var f:TFileStream;
    x,y,z:integer;
    s:string;
begin
  f:=TFileStream.Create(path,fmOpenRead);
  f.ReadBuffer(y,SizeOf(integer));
  SetLength(AllTitel,y+1);
  for x:=0 to y do begin
    ReadString(AllTitel[x].Titel);
    ReadString(AllTitel[x].Name);
    ReadString(AllTitel[x].Pfad);
    ReadString(AllTitel[x].Genre);
    ReadString(AllTitel[x].Jahr);
    ReadString(AllTitel[x].Kommentar);
    ReadString(AllTitel[x].Laenge);
    ReadString(AllTitel[x].Album);

    s:=AllTitel[x].Name;
    LBSammelung.Items.Add(s);
  end;
  f.Free;
end;
Irgendwie...kürzer.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat