Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

Re: TMemoryStream, Insert Daten?

  Alt 2. Feb 2010, 13:54
Beim MemoryStream geht das noch einfach, da man dort direkten Zugriff auf den Inhalt hat.

Delphi-Quellcode:
Type TMemoryStreamInsertHelper = Class Helper for TCustomMemoryStream
    Procedure InsertBuffer(Const Buffer; Count, Pos: LongInt);
  End;

Procedure TMemoryStreamInsertHelper.InsertBuffer(Const Buffer; Count, Pos: LongInt);
  Begin
    If Count <= 0 Then Exit;
    If (Pos < 0) or (Pos > Size) Then
      Raise EWriteError.CreateRes(@SWriteError);
    Size := Size + Count;
    Position := Pos;
    MoveMemory(PAnsiChar(Memory) + Pos + Count, PAnsiChar(Memory) + Pos, Size - Pos);
    If Write(Buffer, Count) <> Count then
      Raise EWriteError.CreateRes(@SWriteError);
  End;
Bei anderen Streams müßte man alles, welches verschoben werden soll auslesen,
um das "Offset" verschoben neu reinspeichern und zum Schluß ebenfalls in die Lücke die neuen Daten reinmachen.


Aber der Vorschlag von DeddyH ist dagegen immernoch das Idealste.
$2B or not $2B
  Mit Zitat antworten Zitat