Wenn ich die Bereitstellung der nicht zu kopierenden Bereiche außen vor lasse (weil eine Frage der Benutzerschnittstelle), dann könnte ich mir die Erzeugung der Ausgabedatei auch so vorstellen:
Delphi-Quellcode:
type
TDropOut = record
Start: cardinal;
Size: cardinal;
end;
TDropArray = array of TDropOut;
procedure DropCopy(fsSource, fsTarget: TStream; drops: TDropArray);
var
i: integer;
begin
fsSource.Position := 0;
fsTarget.Position := 0;
for i := Low(drops) to High(drops) do
begin
fsTarget.CopyFrom(fsSource, drops[i].Start - fsSource.Position);
fsSource.Seek(drops[i].Size, soFromCurrent);
end;
fsTarget.CopyFrom(fsSource, fsSource.Size - fsSource.Position);
end;
Die auszulassenden Bereiche werden im DropArray übermittelt und die Dateien werden über FileStreams angesprochen. Safety code ist nicht an Bord.
Grüße vom marabu