procedure TForm11.Button5Click(Sender: TObject);
var
getPath: string;
setPath: string;
getstream, setstream: TFileStream;
num, n: Integer;
buf: PByte;
bufsize, block: Integer;
begin
getPath := ExtractFilePath(Application.ExeName) + '1234.zip';
setPath := ExtractFilePath(Application.ExeName) + '1234_bak.zip';
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; //bufsize记录流的总大小
block := bufsize div 100; //block记录每块的大小
GetMem(buf, bufsize);
cxProgressBar1.Properties.Max := 100;
cxProgressBar1.Properties.Min := 0;
cxProgressBar1.Position := 0;
while num <> 0 do
begin
Application.ProcessMessages;
n := block;
if n > num then
begin
n := num; //判断最后一个时, 有多少算多少
cxProgressBar1.Position := 100;
Break;
end;
getstream.Read(buf^, n);
setstream.Write(buf^, n);
cxProgressBar1.Position := Trunc((1 - num / bufsize) * 100);
Dec(num, n); //剩余大小
end;
FreeMem(buf, bufsize);
getstream.Free;
setstream.Free;
ShowMessage('拷贝完毕!');
cxProgressBar1.Position := 0;
end;