Предлагаю чихнуть на кроссплатформенность и RTL-обёртки и использовать WinAPI-функцию CopyFileEx. А если реалистично, то копируй кусочками в Clamp(1% размера файла, 64 Кб, 1 Мб).
try Dest:=TFileStream.Create(ADest, fmOpenWrite or fmCreate); try GetMem(buf, bufsize); try while Source.Position < Source.Size do begin BytesReaded:=Source.Read(buf^, bufsize); Dest.WriteBuffer(buf^, BytesReaded); pbProgress.Position:=Trunc((Source.Position / Source.Size)*100); Application.ProcessMessages; end; finally FreeMem(buf); buf:=nil; end; finally FreeAndNil(Dest); end; finally FreeAndNil(Source); end; end;
procedure TForm1.btnCopyClick(Sender: TObject); begin (Sender as TButton).Enabled:=False; CopyFile('pinkfloyd.aac', 'tst.dat'); (Sender as TButton).Enabled:=True; end;