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.