复制文件时,如何显示进度条

原创 2011年01月11日 17:32:00

procedure mycopyfile(sourcef,targetf:string;i:integer);
var
       FromF,ToF:file;
       NumRead,NumWritten:Integer;
       Buf:array[1..2048] of Char;
       n:integer;
begin
         AssignFile(FromF,sourcef);
         Reset(FromF,    1); {    Record    size    =    1    }
         AssignFile(ToF,targetf); {    Open    output    file    }
         Rewrite(ToF,    1); {    Record    size    =    1    }
         n:=0;  
         repeat
                   BlockRead(FromF,    Buf,    SizeOf(Buf),    NumRead);
                   form1.ProgressBar1.Position:=sizeof(buf)*n*100    div    FileSize(FromF)*i div 4;
                   application.ProcessMessages;
                   //显示进度
                   BlockWrite(ToF,    Buf,    NumRead,    NumWritten);
                   inc(n);
           until    (NumRead    =    0)    or    (NumWritten    <>    NumRead);
           form1.ProgressBar1.Position:=100;
           CloseFile(FromF);
           CloseFile(ToF);
end;
====================================================================================

以下例子是关于delphi复制文件,加上进度条的方法的例子的关键代码:

procedure TForm1.Button1Click(Sender: TObject);
const
  getPath = 'c:/temp/get.rar';
  setPath = 'c:/temp/set.rar';
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);

  ProgressBar1.Max := 100;
  ProgressBar1.Min := 0;
  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);
    ProgressBar1.Position := Trunc((1 - num / BufSize) * 100);
    Dec(num, n);
  end;

  FreeMem(buf, BufSize);
  getStream.Free;
  setStream.Free;

  ShowMessage('复制完毕');
  ProgressBar1.Position := 0;
end;

end.

 

版权声明:【敦格作品】,欢迎引用,注明出处:http://blog.csdn.net/shuaihj

文件复制过程中显示进度条(九)

  文件复制过程中显示进度条(九)本文讲述如何在文件复制过程中显示进度条。1.      创建一个对话框工程:CopyFileProcessor2.      添加一个文本框,用来显示浏览出来的源文件...

实现Linux下带进度显示的cp命令 - xcp

实现Linux下带进度显示的cp命令 - xcp 作者:阙荣文 - Q++ Studio Linux下复制文件的命令cp非常强大,就是有一点不是很好:没有进度提示。尤其是在复制...

linux下显示dd命令的进度

linux下显示dd命令的进度: dd if=/dev/zero of=/tmp/zero.img bs=10M count=100000 想要查看上面的dd命令的执行进度,可以使用下面几种...
  • xyz846
  • xyz846
  • 2012年03月19日 10:58
  • 33472

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Qt 复制文件 实现进度条显示

  • 2017年12月14日 15:37
  • 5KB
  • 下载

wpf文件复制显示进度条效果(双线程)

先看运行效果 xaml如下: xaml代码
  • cdjcong
  • cdjcong
  • 2013年08月02日 10:00
  • 5548

上传文件时显示进度条的代码

//下载时检测网络环境并显示下载进度 if(/android/i/.test(navigator.userAgent)) {//判断为android }else if(/ipad | iphone...

vc++复制文件进度条图标

  • 2013年07月25日 09:08
  • 16KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:复制文件时,如何显示进度条
举报原因:
原因补充:

(最多只允许输入30个字)