Einzelnen Beitrag anzeigen

Udontknow

Registriert seit: 17. Jun 2002
223 Beiträge
 
#8

Re: Dynamisches Array aus Filestream lesen ?

  Alt 8. Mai 2007, 11:09
Hallo!

Ein paar Tipps:

Immer ReadBuffer und WriteBuffer anstelle von Read und Write verwenden, damit ist man ein wenig sicherer, was Fehlervermeidung angeht.
Die Größe des Arrays würde ich zu Anfang in den Stream schreiben. Du kannst dann später nämlich auch noch weitere Informationen in die Datei schreiben, die nicht zum Array gehören.
Den Code zum Lesen und Schreiben des Streams würde ich in Routinen LoadFromStream und SaveToStream auslagern und diese dann von LoadFromFile/SaveToFile aufrufen lassen. So kannst du später die Datenquellen ganz leicht ändern, z.B. plötzlich von einem TCP-Server einen Array abholen etc...

Hier ein bisserl Code:

Delphi-Quellcode:
procedure LoadFromStream(Stream:TStream);
var i,count:Integer;
begin
  //Anzahl der Elemente auslesen
  Stream.ReadBuffer(count,SizeOf(count));

  //Array-Länge setzen
  SetLength(bwl1,count);
  
  //Record-Daten aus Stream lesen
  for i:=0 to count-1 do
    Stream.ReadBuffer(bwl1[i],SizeOf(bwl1[i]));
end;

procedure LoadFromFile(FileName:String);
var
  f: TFileStream;
begin
  f := TFileStream.Create(FileName,fmOpenRead);
  try
    LoadFromStream(f);
  finally
    f.Free;
  end;
end;
Die Speicherroutinen müssen analog aufgebaut werden (also erst Anzahl der Elemente als Integer schreiben, dann die einzelnen Records).

Cu,
Udontknow
  Mit Zitat antworten Zitat