Einzelnen Beitrag anzeigen

flow4.2

Registriert seit: 5. Sep 2007
5 Beiträge
 
#8

Re: Daten in Datei einfügen bzw. löschen

  Alt 9. Apr 2010, 16:05
Achja...
Ich habe noch nie mit Class Helper gearbeitet, aber eigentlich müsste das doch so aussehen:
(also es funktioniert so auf jeden Fall )


Delphi-Quellcode:
type
  TStreamHelper = class helper for TStream
  public
    procedure InsertData(const Len: Int64; Insert: TStream = nil);
    procedure RemoveData(const Len: Int64; Removed: TStream = nil);
  end;


...


procedure TStreamHelper.InsertData(const Len: Int64; Insert: TStream = nil);
const
  BufSize = $00010000;
var
  Buf: PChar;
  N: Integer;
  P: Int64;
  SSize, Z: Int64;
begin
  GetMem(Buf, BufSize);
  try
    P := Position;
    Z := 0;
    SSize := Size;
    repeat
      if (SSize-Z)-P < BufSize then N := (SSize-Z)-P else N := BufSize;
      Position := SSize-Z-N;
      ReadBuffer(Buf^, N);
      Position := SSize-Z-N+Len;
      WriteBuffer(Buf^, N);
      Inc(Z, N);
    until (SSize-Z) = P;
    if Insert <> nil then begin //Daten von Insert einfügen
      Position := P;
      Insert.Position := 0;
      if Len <= Insert.Size then CopyFrom(Insert, Len) else CopyFrom(Insert, 0);
    end;
  finally
    FreeMem(Buf, BufSize);
  end;
end;

procedure TStreamHelper.RemoveData(const Len: Int64; Removed: TStream = nil);
const
  BufSize = $00010000;
var
  Buf: PChar;
  N: Integer;
  P: Int64;
begin
  GetMem(Buf, BufSize);
  try
    P := Position;
    if Removed <> nil then begin //Daten, die gelöscht werden in Removed kopieren
      Position := P;
      Removed.Position := 0;
      Removed.CopyFrom(Self, Len);
    end;
    repeat
      if Size-P-Len < BufSize then N := Size-P-Len else N := BufSize;
      Position := P+Len;
      ReadBuffer(Buf^, N);
      Position := P;
      WriteBuffer(Buf^, N);
      Inc(P, N);
    until P = Size-Len;
    Size := Size - Len;
  finally
    FreeMem(Buf, BufSize);
  end;
end;

Die Daten werden an der aktuellen Position mit der Länge Len eingefügt bzw. gelöscht
  Mit Zitat antworten Zitat