Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#14

Re: Datei stückchenweise mit TFileStream einlesen

  Alt 4. Okt 2003, 11:31
Delphi-Quellcode:
var
  Len: integer;
  Buffer: array[0..1023] of Byte;
  ...
begin
...
  while SrcStream.Position < SrcStream.Size do
  begin
    Len := SrcStream.Size - SrcStream.Position;
    if Len > SizeOf(Buffer) then Len := SizeOf(Buffer);
    SrcStream.Read(Buffer, Len);
    EncodeBuffer(Buffer, Buffer, Len);
    DestStream.WriteBuffer(Buffer, Len);
  end;
...
Wichtig! EncodeBuffer() sollte nach Möglichkeit inplaced arbeiten.

oder
Delphi-Quellcode:
var
  Len: integer;
  Buffer: array[0..1023] of Byte;
  ...
begin
...
  repeat
    Len := SrcStream.Read(Buffer, SizeOf(Buffer)); // .Read statt .ReadBuffer um Exceptions zu vermeiden
    EncodeBuffer(Buffer, Buffer, Len);
    DestStream.WriteBuffer(Buffer, Len);
  until Len = 0;
...
end;
Dies vermeidet die Seek-Aufrufe in den Dateistream durch das OS um .Position und .Size zu berechnen. Dadurch wird also der Dateistream nur sequentiell gelesen und dies ist erheblich schneller !! Probier es aus mit großen Files.

Gruß Hagen
  Mit Zitat antworten Zitat