procedure Resume(sFilePath:string;IDFtp: TIdFTP);
const
  Send_Buffer = 1048576; //一次提交1MB的东西
var
  AFileStream: TFileStream;
  AMemStream: TMemoryStream;
  sFileName: string; 
  iFileSize: Double;
  Count:Integer;    //循环次数,
  AddCount:Double ; //每次增加数
  LastTimeTransfer:Int64;
  i: Integer;
begin
    sFileName := ExtractFileName(sFilePath );
    //计算要进行多少次
    iFileSize := GetFileSize(sFilePath);
    Count := Round(iFileSize/Send_Buffer);   //得到的次数
    if Count<>0 then
      AddCount := 100/count
    else
      AddCount := 100;    AFileStream := TFileStream.Create(sFilePath, fmOpenRead or fmShareExclusive);
    IDFTP.TransferType := ftBinary;
    try
      if IDFtp.Connected then
      begin
        //获取断点
        AFileStream.Seek(IDFtp.Size(sFileName), soBeginning);
        //开始断点续传
        AMemStream := TMemoryStream.Create;
        try          
          while (IDFtp.Connected) and (AFileStream.Position < AFileStream.Size) do
          begin
            AMemStream.Clear;
            AMemStream.CopyFrom(AFileStream,
              min(Send_Buffer, AFileStream.Size - AFileStream.Position));
            LastTimeTransfer := IDFtp.Size(sFileName);
            if LastTimeTransfer=-1 then
              IDFtp.Put(AMemStream, sFileName, False)
            else
            begin
              IDFtp.Put(AMemStream, sFileName, True);
            end;           
          end;
          Alst.EndUpdate;
          AMemStream.Free;
        except
          AMemStream.Free;
          raise;
        end;
        //判断是否上传完毕
        if AFileStream.Position = AFileStream.Size then
          ShowMessage('上传完毕')
        else
          ShowMessage('上传中止');
        AFileStream.Free;
      end;
    except
      AFileStream.Free;
      ShowMessage('出错啦!');
    end; end;用这个方法上传之后,上传的文件为1024KB,求高手解答

解决方案 »

  1.   

    1024有什么问题,应该多大,1024KB不就是1m吗
      

  2.   

    你跟踪一下,看看有没有执行IDFtp.Put(AMemStream, sFileName, True);如果执行了,看看每次执行完这句话,ftp上的文件是否有变化
      

  3.   

    跟踪了,每次执行后,FTP上的文件就是那么大,没有什么变化。搞了一天了,还是这个样子呀。
      

  4.   

    有个关键问题LZ没说清楚,你所说的每次都是1M的内容,是结尾处1M的内容?还是开头处1M的内容,以后的都没有了?我感觉是第一种情况,你重复写入了,直接覆盖了之前写的内容