IdFTP1.Put(name, ExtractFileName(name),true);IdFTP1.Put 方法上传怎样指定需要续传部分的大小,续传怎么老是整个文件全部追加上原来已经上传的部分呀

解决方案 »

  1.   

    该函数实现的功能就是如此,当最后一个参数为true时,若存在同名文件则将上传的文件追加到已存在的文件。
    若想实现续传的功能可以自己计算需要续传的部分,提取该部分,使用TIdFTP.Put(const ASource: TStream; const ADestFile: string = '';
     const AAppend: boolean = false);上传
      

  2.   

    谢谢你的回答,不过
    TStream,这类我不大熟悉,能不能给一段示例代码,感激!!!!
      

  3.   

    var
      AStream: TFileStream;
    begin
          AStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone);
          IdFTP1.Put(AStream, ExtractFileName(FileName), True);
    end;
    以上是上传TStream的用法,但该方法只是将整个文件上传,若想实现续传的话就需要自己计算续传的部分进行上传。
    首先根据客户端文件大小和服务端同名文件大小的差来得到需要续传部分的大小,假定为TransferLength。
    然后定义AStream1:TMemoryStream来保存需要上传部分。
    AStream1 := TMemoryStream.Create;
    AStream1.CopyFrom(AStream, TransferLength);  //从AStream得到需要上传部分
    最后进行上传
    IdFTP1.Put(AStream1, ExtractFileName(FileName), True);
    大概代码如下:
    var
      AStream: TFileStream;
      AStream1:TMemoryStream;
      TransferLength: LongWord;
    begin
      AStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone);
      AStream1 := TMemoryStream.Create;
      try    
        TransferLength := AStream.Size - 服务端同名文件大小;
        AStream.Seek(服务端同名文件大小, soFromBeginning);
        AStream1.CopyFrom(AStream, TransferLength );
        IdFTP1.Put(AStream1, ExtractFileName(FileName), True);
      finally
        FreeAndNil(AStream);
        FreeAndNil(AStream1);
      end;
    end;不知你需要上传的文件一般多大?是否非要续传功能,由于上传的来源一般不确定,有可能导致产生错误的文件。
      

  4.   

    谢谢hahafan...
    还有个问题请帮帮忙:
    http://community.csdn.net/Expert/topic/4657/4657020.xml?temp=.2249262