Guten Abend Forum
...
Ich sitze jetzt schon ziemlich lange an einer kleinen Funktion, die mich zur Weißglut treibt.. Hätte ich nicht eine kleine Pause eingelegt, wäre meine Maus jetzt vermutlich durch die vielen Schläge auf den Tisch nicht mehr funktionsfähig.. und damit das auch später nicht passiert, belästige ich euch einfach mal...
Zum Thema: Ich habe mir einen Nachfahren von TMemoryStream gebaut und diesem eine Prozedur RemoveRange verpasst.. das sieht so aus:
Delphi-Quellcode:
procedure TMeinStream.RemoveRange(FromOffset: Integer; Count: Integer);
var
OutStream: TMemoryStream;
begin
OutStream := TMemoryStream.Create;
try
Position := 0; // An Anfang gehen
if FromOffset = 0 then
begin
Seek(Count, soFromCurrent); // Bei FromOffset=0, einfach Count Bytes überspringen
end else
begin
OutStream.CopyFrom(Self, FromOffset); // Den Anfang kopieren
Seek(Count, soFromCurrent); // Count Bytes überspringen
end;
if Size - Position > 0 then
OutStream.CopyFrom(Self, Size - Position); // Ende kopieren
Clear;
if OutStream.Size > 0 then
CopyFrom(OutStream, 0);
finally
OutStream.Free;
end;
end;
Ich möchte damit eben ab Position FromOffset Count Bytes wegmachen. Die Funktion habe ich mit einer kleinen Textdatei getestet, aus der ich einzelne Wörter herausschneide, hat super geklappt. Jetzt habe ich das Teil mal benutzt, um eine Datei zu bearbeiten und bei dem letzten CopyFrom gibt es immer eine
Exception. OutStream ist natürlich vorhanden und OutStream.Size ist wohl irgendwas bei 20000 Bytes... Warum klappt das nicht? Das müsste doch einfach nur gehen...? Ich vermute mal, ich mache irgendeinen dummen Fehler.. Aber ich komme einfach nicht dahinter.... und jetzt werde ich eine kleine Pause einlegen um mich zu beruhigen.. und um auf Antworten zu warten, für die ich mich schon im Vorraus bedanke
...