Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

Re: TMemoryStream, Insert Daten?

  Alt 2. Feb 2010, 12: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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat