FTP断点续传用哪一个好?FtpGetFile /InternetReadFile 要实现的功能如下:
软件功能主要是在被动且支持续传的FTP服务器上下载已知路径的指定文件,有可能是超2gb的大文件,需要实现可靠稳定的续传.同时支持进度及下载速度显示(两种api下载的基本代码我都已经调试出来了,就不知该往哪种上深入再把后面的功能搞出来)baidu了,发现应该是用ftpcommand来发送REST再实现续传但关于ftpcommand这个api的讲解太少了。完全不知该怎么用。还望有朋友写几个基本应用步骤或几行示例外加注解.

解决方案 »

  1.   

    没有朋友愿意帮忙么?经过更多资料的参考,发现虽然ftpgetfile对于后期扩展很不便.所以以InternetReadFile 
    为深入后续的调试.搞定了进度,下载速度,等等很多小节了,就差续传了.主要就是因为这方面的api介绍太少。实在让人搞不懂该怎么操作,如果有精通vb对于ftp编程的高人愿意相助的话人民币好说.后面还有可能涉及的地方就是ftp ssl,modez模式两部份。
      

  2.   

    没有朋友愿意帮忙么?经过更多资料的参考,发现虽然ftpgetfile对于后期扩展很不便.所以以InternetReadFile 
    为深入后续的调试.搞定了进度,下载速度,等等很多小节了,就差续传了.主要就是因为这方面的api介绍太少。实在让人搞不懂该怎么操作,如果有精通vb对于ftp编程的高人愿意相助的话人民币好说.后面还有可能涉及的地方就是ftp ssl,modez模式两部份。
      

  3.   

    FtpGetFile不支持断点续传,可以用FtpOpenFile、InternetSetFilePointer、InternetReadFile来实现。
      

  4.   

    我没研究过这类API,因为我研究的是基础的FTP协议,直接用Winsock来实现握手通讯,
    虽然研究的方向不同,但是还是有点心得可以讨论一下。
    VB无论是在读文件或写文件上,操作2GB大小的文件都比较困难,超出一定的范围就无法
    读或写了,曾经有人专门发过大文件操作的帖子,你也可以去看看。
      

  5.   

    InternetSetFilePointer对ftp不行.操作2gb以上的文件主要是long型不购,api里基本都是long,要用curreny或则low,high来才购用
      

  6.   

    分多次调用InternetSetFilePointer试试,例如每次向后移动1GB。
      

  7.   

    不是的。我的意思是InternetSetFilePointer似乎对ftp无效只对http有效.怎么调都是-1。成功不了。我在网上搜索看到microsoft上有个解释大意是InternetSetFilePointer通常不适合于对ftp操作。大多ftp不支持InternetSetFilePointer
      

  8.   

    啊o,
    对vb操控超2gb读写上这个已经有一定经验了不担心,(只是api怎么在ftp传输时超2g后面恐怕要花点时间).对winsock有个基本了解,一开始也想直接操控winsock来的.
    不过写了winsock登陆,超时判断等后觉得实在是用winsock写出来过于麻烦了恐怕还没这个能力就打算用api来写看样子又是遇上麻烦问题了-_-!命真苦啊.如果哪位高人这方面经验丰富能指导一下apifp断点下载超2gb,ftp ssl跟modez的话那就齐了.回报好说请高人们联系我
      

  9.   

    用WINSOCK自己整FTP协议可行不?HTTP/FTP都挺简单的呀......看这个HTTP的:http://www.m5home.com/blog/article.asp?id=65参考一下吧.
      

  10.   

    winsock的确是万能,不过就是中间很多地方感觉比较麻烦点.
    之前做过winsock登陆ftp并做一些查询信息的代码.中间涉及到网强延迟(比如电信的机器访问网通的ftp),感觉很麻烦.....还有就是偶尔未知原因,或网络延迟过大,让winsock发出查询后,让程序不能正确收到回应就停顿了。但这种情况很少出现,非常难排查原因.要是这些地方能有什么好办法的话可能也真还是用winsock来得彻底现在就是是看要是ftp方面的api功能够用了的话,会在开发上省不少事,免得直接操控winsock
      

  11.   

    那你可以试试INET控件,支持FTP指令看看它能不能达到你这2G+的要求.
      

  12.   

    已经调试了InternetReadFile多并发连接传输,技术上是可行的.不过这种循环还真。有点难调.
    续传仍旧还没有着落....上帝啊
      

  13.   

    就是用api下载时怎么分段下载呢?不是做木马晕倒,是做行业工具....居然会联想到做木马上面去
      

  14.   

    补一句。用ftpcommand试了,才知道感觉比winsock的send快了不是一点点....
      

  15.   

    不知道你怎么用的Winsock,但是我想不会有什么东西实现FTP下载会比用Winsock快很多的。
    就不说VB的运行效率如何,即使采用VC开发这方面的效率也差不了多少,因为就网速而言,
    即使你在内网中跑FTP,也就是100M bit,VB处理这些东西的速度还是可以的,更加不用说
    Internet。除非你的程序有问题,否则不会有什么速度上很大的差别。
      

  16.   

    都说了的啊.的确是小弟用winsock不熟,不过winsock send后需要个等待返回,这返回的时间就不好说了,比如电信用winsock联网通....所以中间用了api来毫秒级等待.一旦返回信息就退出等待,3000毫秒超时,但的确在小递代码中api的ftpcommand比winsock快了很多很多(没统计但至少快一倍是有的).虽然winsock直接send命令也很快
      

  17.   

    使用winsock来实现的代码Public Sub Winsock_DataArrival(ByVal bytesTotal As Long)
    On Error GoTo Error1:
    Dim strData As String
    Dim strInfo As String
    Set Winsock1 = Form2.Winsock1
    Winsock1.GetData strData, vbString
    strInfo = CInt(Mid(strData, 1, 3))
    xxxxx = ""Select Case strInfo
    Case 220
    '输入帐号
    Winsock1.SendData "USER " & XName & vbCrLf
    Case 331
    '输入密码
    Winsock1.SendData "PASS " & XPass & vbCrLf
    Case 230
    '已正常联入
    FTPRun = True
    Case 421
    '超时
    FTPRun = False
    Case 530
    '未登陆
    FTPRun = False
    Case 250
    '返回值
    xxxxx = Replace(strData, "250 ", "")
    xxxxx = False
    Case Else
    FTPRun = False
    End Select
    Error1:
    End SubPublic Function xxxxx(FilePath As String) As String
    On Error GoTo Error1:
    WTime = 0
    xxxxx = True
    FTPCon '检测ftp连接,断线自动连接
    Form2.Winsock1.SendData "xxxxx" & Chr(34) & FilePath & Chr(34) & vbCrLf
    While xxxxx = True
    MyDoevents
    WaitTime 1 '毫秒级等待
    WTime = WTime + 1
    If WTime >= 1000 Then GoTo Error1
    Wend
    xxxxx = Replace(xxxxx, vbCrLf, vbNullString)
    Exit Function
    Error1:
    xxxxx = "xxxxx"
    FTPRun = False
    End FunctionPrivate Function FTPCon() As Boolean
    On Error GoTo Error1:
    Dim Savetime As Double
    Dim wsa As WSAdataSet Winsock1 = Form2.Winsock1
    WTime = 0
    If FTPRun = True Then Exit Function
    '如果未连接则等待建立连接
    Winsock1.Close
    'WSAstartup &H202, wsa
    Winsock1.Connect
    While FTPRun = False
    MyDoevents
    WaitTime 1
    WTime = WTime + 1
    If WTime >= 3000 Then FTPRun = False: GoTo Error1
    Wend
    Exit Function
    Error1:
    Winsock1.Close
    End Function