在用nmftp传输文件的时候,怎样实现文件上传的断点续传?(200分)

  • 主题发起人 主题发起人 janlon
  • 开始时间 开始时间
J

janlon

Unregistered / Unconfirmed
GUEST, unregistred user!
搞了几天,还是搞不懂!不用nmftp也可以,说一下实现的方法,最好有源代码作为参考;希望能详细点...
 
用indy控件吧,已经替代nm了

不过只知道如何在两点传文件,断电。ftp可以。它有tidftp控件,有函数直接控制
 
呵呵,搜搜以前的贴子

http://www.delphibbs.com/delphibbs/dispq.asp?lid=1895587
http://www.delphibbs.com/delphibbs/dispq.asp?lid=995311
 
啊啊啊啊啊:

有没有完整的例子,参考一下?
 
呵呵,楼主不要老要现成的代码,这样对你没好处

好好看看以前的贴子吧,写的很清楚啊:)
 
啊啊啊啊啊:
谢谢!这次时间比较紧,下不为例...
 
你的文件在传输的时候应该是以流方式吧,那么我记得有个TStream.Position属性,这个就能实现断点续传了.
 
由于无法提问,只好再这里反映了,先道歉了,,论坛的激活码用什么邮箱可以收到,我换了新浪,网易,21cn都不行,各位有经验可以写到我的邮箱ddxxyy2002@163.com再次感谢!
 
ddxxyy2002@163.com:
我以前用过sina与163.net都不行,后来用hotmail.com,一下就收到了,建议用hotmail.com的邮箱!
 
楼主我告你的那两个贴子里都有答案啊,你试试就知道了

办法一:
能否续传是由FTP Server决定的, 在FTP Server允许续传的情况下,直接使用Get方法就行了:
procedure Get(const ASourceFile: string; ADest: TStream; AResume: Boolean = false); overload;
procedure Get(const ASourceFile: string; const ADestFile: string; const ACanOverwrite: boolean = false; AResume: Boolean = false); overload;
只要传入最后一个参数为True就是续传了, 默认是不续传的。

例如:IdFTP1.Get(edit1.text, 'c:/abc.rar', false, true);


办法2
首先你的FTP服务器必须支持断点传续,用Indy控件实现的,供参考。
procedure TfrmMain.FTPDownload(str,strTo: string);
var
Stream: TFileStream;
strFrom: string;
sr: TSearchRec;
begin
if FileExists(strTo) then
begin
FindFirst(strTo, faAnyFile, sr);
if sr.size < idFTP.size(strFrom) then
begin
if Application.MessageBox('文件存在,继续下载吗?', '注意', MB_YESNO) = idYes then
begin
if idFTP.Connected then
begin
Stream := TFileStream.Create(strTo, fmOpenWrite);
Stream.Seek(0, soFromEnd);
DownloadedLen := sr.Size;
idFTP.SendCmd(Format('REST %d', [sr.Size]));
try
try
idFTP.Get(strFrom, Stream);
except
end;
finally
Stream.Free;
end;
end;
end;
end;
end;
end;
 
后退
顶部