ProgressBar1.Max:=(SearchRec.Size);
FromFile:=TFileStream.Create(ServerDIR+SearchRec.Name,fmOpenRead or fmShareDenyNone);
try
  ToFile:=TFileStream.Create(LocalDIR+SearchRec.Name,fmCreate);
  try
    ToFile.CopyFrom(FromFile,0);
  finally
    ToFile.Free;
  end
finally
  FromFile.Free;
end;
代码如上,我想在拷贝的时候加入一个ProgressBar,应该怎么加?另外copyfrom函数返回的默认最小值是多少?我自己也考虑过了,这样的想法可以吗?(try里面再套Repeat,没试过,不过会不会不太好?)如果可以的话,until后面应该怎么写?   我还很菜,请各位大哥帮个忙!try
  Repeat
    ToFile.CopyFrom(FromFile,1);
    ProgressBar1.StepIt;
  Until  .............
finally
  ToFile.Free;
end;

解决方案 »

  1.   

    function CopyFrom(Source: TStream; Count: Int64): Int64;
    Count参数如果是0的话,则表示Source的指针会到0的位置,而拷贝全部的文件
    如果Count大于0,则Source会从当前的指针开始,拷贝Count大小的字节给目标。
      

  2.   

    linzhengqun(风。为菜鸟服务)   你说的我知道啊,所以我才想可不可以用
      Repeat
        ToFile.CopyFrom(FromFile,1);
        ProgressBar1.StepIt;
      Until  .............
    这个方法来实现啊,但Until 后面的语句应该怎么写呢?
      

  3.   

    var
     ToFile:TFileStream;
     FromFile:TFileStream;
     CurentPt:integer;
     temp:integer;
    begin
      FromFile:=TFileStream.Create('E:\download\qq2004_skycn(1).exe',fmOpenRead or fmShareDenyNone);
      temp:=FromFile.Size div 10000;//分成10000份拷贝,你可以根据需要自己定义
      ProgressBar1.Max:=temp;
      try
        ToFile:=TFileStream.Create('F:\qq2004_skycn(1).exe',fmCreate);
        try
         CurentPt:=0;
          Repeat
            if FromFile.Size-CurentPt<=temp then temp:=FromFile.Size-CurentPt;
            ToFile.CopyFrom(FromFile,temp);
            inc(CurentPt,temp);
            ProgressBar1.Position:=ProgressBar1.Position+1;
          Until CurentPt>=FromFile.Size;
        finally
          ToFile.Free;
        end
      finally
        FromFile.Free;
    end;