procedureMycopyfile (SOURCEF,TARGETF:string; i:integer);varFromf,tof:file; Numread,numwritten:integer; Buf:Array[1..2048] ofChar; N:integer;beginAssignFile (FROMF,SOURCEF); Reset (FROMF,1);{Record size = 1}AssignFile (TOF,TARGETF);{Open Output File}Rewrite (ToF,1);{Record size = 1}N:=0; RepeatBlockread (FROMF, Buf, SizeOf (Buf), numread); Form1. Progressbar1.position:=sizeof (BUF) *n* - DivFileSize (FROMF) *iDiv 4; Application. ProcessMessages; //Show ProgressBlockwrite (ToF, Buf, Numread, Numwritten); Inc (N); until(Numread =0)or(Numwritten <>numread); Form1. Progressbar1.position:= -; CloseFile (FROMF); CloseFile (ToF);End; ====================================================================================The following example is a key code for an example of a Delphi copy file, plus a progress bar method:procedureTform1.button1click (sender:tobject);ConstGetPath='C:/temp/get.rar'; SetPath='C:/temp/set.rar';varGetstream,setstream:tfilestream; Num, N:integer; Buf:pbyte; Bufsize,block:integer;begin if notFileExists (GetPath) Then beginShowMessage ('source file does not exist'); Exit; End; GetStream:= TFileStream.Create(GetPath, Fmopenreadorfmshareexclusive); SetStream:= TFileStream.Create(SetPath, fmcreate); Num:=getstream.size; Setstream.size:=num; Getstream.position:=0; Setstream.position:=0; BufSize:=num; Block:= BufSizeDiv -; Getmem (buf, BufSize); Progressbar1.max:= -; Progressbar1.min:=0; Progressbar1.position:=0; whileNum <>0 Do beginapplication.processmessages; N:=Block; ifn > num ThenN: =num; Getstream.readbuffer (buf^, N); Setstream.writebuffer (buf^, N); Progressbar1.position:= Trunc ((1-num/bufsize) * -); DEC (num, n); End; Freemem (buf, BufSize); Getstream.free; Setstream.free; ShowMessage ('Copy Complete'); Progressbar1.position:=0;End;End.
http://blog.csdn.net/shuaihj/article/details/6129551
How to display a progress bar when copying files (using TFileStream 1.1-point reading, or using Blockread)