The Code contains errors and redundant stuff.
Here's my improved / modified and untested version.
Delphi-Quellcode:
Const
BLOCKSIZE = 1024*1024; // Write in chunks @ 1MB
function AddData(ID:string; pBuf: Pointer; Count: Integer): Integer;
begin
FFile.Seek(0, soFromEnd);
if( Result > -1 )then // ***** WHERE DOES THIS Result COME FROM? if you leave it Like this, it will not work.
Result := FFile.Write(PAnsiChar(pBuf)^, Count);
end;
function InsertStream(ID: String;aStream: TStream): Integer;
var
pBuff : Pointer;
BytesRead : Integer;
begin
GetMem(pBuff, BLOCKSIZE); // allocate a chunk of memory
try
aStream.Position := 0;
Repeat
BytesRead := aStream.Read(pBuff^, MIN (BLOCKSIZE, aStream.Size - aPosition)); // move data into the chunk
Result := AddData(ID, pBuff, BytesRead); // Add the chunk to the file
Until (Result<>0) or (BytesRead < BLOCKSIZE);
finally
FreeMem(pBuff, BLOCKSIZE);
end;
end;
However, a much simpler approach would be
Delphi-Quellcode:
FFile.Seek(0, soFromEnd);
FFile.CopyFrom (aStream, FFile.Position);
Das Bild hängt schief.