Ohne auf deinen Code einzugehen, ich habe da folgende Routine:
Delphi-Quellcode:
procedure FastCopy_All(SouName,DesName:String;DelSou:Boolean);
const BufferSize = 32768;
var Sou,Des : file;
Buffer : Array[1..BufferSize] of Byte;
NumRead,
NumSave : Integer;
begin
CopiedBytes:=0;
AssignFile(Sou,SouName); {$I-} reset(Sou,1); {$I+}
FastCopyResult:=IOresult;
if FastCopyResult<>0 then exit;
AssignFile(Des,DesName); {$I-} rewrite(Des,1); {$I+}
FastCopyResult:=IOresult;
if FastCopyResult<>0 then exit;
repeat
BlockRead (Sou,Buffer,SizeOf(Buffer),NumRead);
BlockWrite(Des,Buffer,NumRead, NumSave);
inc(CopiedBytes,NumSave);
Application.ProcessMessages;
until (NumRead=0) or (NumSave<>NumRead);
CloseFile(Sou);
CloseFile(Des);
if DelSou then erase(Sou);
end;
Der Procedurkopf sollte eigentlich alles erklären. Die globale Variable FastCopyResult ist global deklariert, das würde ich heute anders machen ...