procedure TForm1.IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCountMax: Integer);begin
        s:=IdFTP1.Size('SMSClient.exe'); //在这里获得的数据大小是149995
        ProgressBar1.Position:=0;
        ProgressBar1.Max:=s;
        ProgressBar1.Min:=0;
       Label1.Caption:='正在更新...'   +   IntToStr(AWorkCountMax);
end;procedure TForm1.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
     if   ProgressBar1.Max   >   0   then
      begin
          Label2.Caption:='已完成...'+IntToStr(AWorkCount)   +   '   bytes   /'   +   IntToStr(ProgressBar1.Max)   +   '   bytes.';
         ProgressBar1.Position   :=   AWorkCount;
      end
     else     Label2.Caption:=IntToStr(AworkCount)   +   '   bytes.'; //在这里下载完毕后AworkCount的字节是147899
end;
为什么AworkCount最后得到的下载数量大小和之前Size得到的不一样??下载后的文件运行没有问题的.

解决方案 »

  1.   

    Work事件是正在进行中,并没有结束
    结束的话,还有个WorkEnd事件,只要它发生了,就代表全部下载完成了
      

  2.   

    WorkEnd事件我写了,我问的意思是为什么下载之后的大小根用SIZE得出来的不一样,你都没看好我要问的是什么
      

  3.   

    work事件是下载还没结束发生的,你在这里取大小有什么用?
    要取你在workend事件中,用winapi取得文件大小
      

  4.   

    肯定要在WorkBegin取大小啊,因为要判断下载进度~都END了还取大小有什么意义
      

  5.   

    开始的时候用Ftp.size取得文件大小
    结束后用SizeOf取得下载完文件的实际大小