(Moderator)
Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
Delphi 2007 Enterprise
|
Re: bei string in TFileStream kommt 1 Zeichen zu wenig an...
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")
|
|
Zitat
|