CopyFileProgressBar(pwidechar(ListBox1.Items.Strings[I]),pwidechar(NewDir+'\'+ExtractFileName(ListBox1.Items.Strings[I]))); procedure CopyFileProgressBar(getPath,setPath:string); var getStream,setStream: TFileStream; num, n: Integer; buf: PByte; BufSize,block: Integer; begin if not FileExists(getPath) then begin // ShowMessage('源文件不存在'); // Exit; end; getStream := TFileStream.Create(getPath, fmOpenRead or fmShareExclusive); setStream := TFileStream.Create(setPath, fmCreate); num := getStream.Size; setStream.Size := num; getStream.Position := 0; setStream.Position := 0; BufSize := num; block := BufSize div 100; GetMem(buf, BufSize); form1.ProgressBar1.Max := 100; form1.ProgressBar1.Min := 0; form1.ProgressBar1.Position := 0; while num <> 0 do begin Application.ProcessMessages; n := block; if n > num then n := num; getStream.ReadBuffer(buf^, n); setStream.WriteBuffer(buf^, n); form1.ProgressBar1.Position := Trunc((1 - num / BufSize) * 100); Dec(num, n); end; FreeMem(buf, BufSize); getStream.Free; setStream.Free; //ShowMessage('复制完毕'); form1.ProgressBar1.Position := 0; end;