Registriert seit: 28. Jun 2007
417 Beiträge
|
Re: In Stream schreiben und lesen ?
26. Jun 2008, 09:55
Ich hab den Code grade wiedergefunden. In den Stream werden in diesem Fall mehrere Datensätze vom Typ TCard geschrieben. Der besteht unter anderem aus einem Bitmap und mehreren Strings.
Delphi-Quellcode:
type
TCard = record
Bitmap: TBitmap; //Kartenbild
Name: String; //Kartenname
Description: String;//Kartenbeschreibung
Kind: String; //Kartentyp
Action: String; //Auszuführende Aktionen
end;
procedure TCardset.ReadFromFile(Filename: string);
var
lFs: TFileStream;
lMs: TMemoryStream;
lLen: Longint;
lI: Integer;
begin
Free;
lFs:=TFileStream.Create(Filename,fmOpenRead);
lMs:=TMemoryStream.Create;
try
//Länge des Cardset
lFS.Read(lLen,SizeOf(lLen));
SetLength(Cards,lLen);
//Die Daten des Cardset speichern
for lI := 0 to Length(Cards) - 1 do begin
//Bitmap
lMs.Clear;
lFs.Read(lLen,SizeOf(lLen));
lMs.CopyFrom(lFs,lLen);
Cards[lI].Bitmap:=TBitmap.Create;
lMs.Position:=0;
Cards[lI].Bitmap.LoadFromStream(lMs);
//Strings
lFs.Read(lLen,SizeOf(lLen));
SetLength(Cards[lI].Name,lLen);
lFs.Read(PChar(Cards[lI].Name)^,lLen);
lFs.Read(lLen,SizeOf(lLen));
SetLength(Cards[lI].Kind,lLen);
lFs.Read(PChar(Cards[lI].Kind)^,lLen);
lFs.Read(lLen,SizeOf(lLen));
SetLength(Cards[lI].Description,lLen);
lFs.Read(PChar(Cards[lI].Description)^,lLen);
lFs.Read(lLen,SizeOf(lLen));
SetLength(Cards[lI].Action,lLen);
lFs.Read(PChar(Cards[lI].Action)^,lLen);
end;
finally
lFS.Free;
lMs.Free;
end;
end;
procedure TCardset.SaveToFile(Filename: string);
var
lFs: TFileStream;
lMs: TMemoryStream;
lLen: Longint;
lI: Integer;
begin
lFs:=TFileStream.Create(Filename,fmCreate);
lMs:=TMemoryStream.Create;
try
//Länge des Cardset
lLen:=Length(Cards);
lFs.Write(lLen,SizeOf(lLen));
//Die Daten des Cardset speichern
for lI := 0 to Length(Cards) - 1 do begin
//Bitmap
lMs.Clear;
Cards[lI].Bitmap.SaveToStream(lMs);
lMs.Position:=0;
lLen:=lMs.Size;
lFs.Write(lLen,SizeOf(lLen));
lFs.CopyFrom(lMs,lLen);
//Strings
lLen:=Length(Cards[lI].Name);
lFs.Write(lLen,SizeOf(lLen));
lFs.Write(PChar(Cards[lI].Name)^,lLen);
lLen:=Length(Cards[lI].Kind);
lFs.Write(lLen,SizeOf(lLen));
lFs.Write(PChar(Cards[lI].Kind)^,lLen);
lLen:=Length(Cards[lI].Description);
lFs.Write(lLen,SizeOf(lLen));
lFs.Write(PChar(Cards[lI].Description)^,lLen);
lLen:=Length(Cards[lI].Action);
lFs.Write(lLen,SizeOf(lLen));
lFs.Write(PChar(Cards[lI].Action)^,lLen);
end;
finally
lFs.Free;
lMs.Free;
end;
end;
|
|
Zitat
|