for i:=0 to BlockNum-1 do
                begin
                if (StopTrans)or(SendLen<=0) then Break;
                BlockRead(Ftrans,BlockBuf[0],BlockLen); 
                  SendLen:=send(Client,BlockBuf,BlockLen,0);
                ProBar.Position:=i;
                Application.ProcessMessages;
                end;
今天参看了一个程序,已将文件划分为BlockNum个模块,在循环读取过程中,如何实现每次接着上一部分读取的继续读而不是重新开始从头读?

解决方案 »

  1.   

    用BlockRead读取File时,每读一块,File游标自动移动,下次BlockRead时从上次的末尾位置开始读----本来就是这样的。
      

  2.   

     for i:=0 to BlockNum-1 do 
      begin 
      if (StopTrans)or(SendLen <=0) then Break; 
       BlockRead(Ftrans,BlockBuf[0],BlockLen);//给你提个醒,这里实际读取的并不一定是你给定的文件长度bolcklen; 
                      SendLen:=send(Client,BlockBuf,BlockLen,0); //所以这里也可能出错
                    ProBar.Position:=i; 
                    Application.ProcessMessages; 
                    end; 
    稍微修改一下
     for i:=0 to BlockNum-1 do 
                    begin 
                    if (StopTrans)or(SendLen <=0) then Break; 
                    len:=BlockRead(Ftrans,BlockBuf[0],BlockLen); 
                      SendLen:=send(Client,BlockBuf,Len,0); 
                    ProBar.Position:=i; 
                    Application.ProcessMessages; 
                    end; 
      

  3.   

    现在一般都使用TFileStream,这个比较好用些。呵呵