FTP断点续传用哪一个好?FtpGetFile /InternetReadFile 要实现的功能如下:
软件功能主要是在被动且支持续传的FTP服务器上下载已知路径的指定文件,有可能是超2gb的大文件,需要实现可靠稳定的续传.同时支持进度及下载速度显示(两种api下载的基本代码我都已经调试出来了,就不知该往哪种上深入再把后面的功能搞出来)baidu了,发现应该是用ftpcommand来发送REST再实现续传但关于ftpcommand这个api的讲解太少了。完全不知该怎么用。还望有朋友写几个基本应用步骤或几行示例外加注解.
软件功能主要是在被动且支持续传的FTP服务器上下载已知路径的指定文件,有可能是超2gb的大文件,需要实现可靠稳定的续传.同时支持进度及下载速度显示(两种api下载的基本代码我都已经调试出来了,就不知该往哪种上深入再把后面的功能搞出来)baidu了,发现应该是用ftpcommand来发送REST再实现续传但关于ftpcommand这个api的讲解太少了。完全不知该怎么用。还望有朋友写几个基本应用步骤或几行示例外加注解.
为深入后续的调试.搞定了进度,下载速度,等等很多小节了,就差续传了.主要就是因为这方面的api介绍太少。实在让人搞不懂该怎么操作,如果有精通vb对于ftp编程的高人愿意相助的话人民币好说.后面还有可能涉及的地方就是ftp ssl,modez模式两部份。
为深入后续的调试.搞定了进度,下载速度,等等很多小节了,就差续传了.主要就是因为这方面的api介绍太少。实在让人搞不懂该怎么操作,如果有精通vb对于ftp编程的高人愿意相助的话人民币好说.后面还有可能涉及的地方就是ftp ssl,modez模式两部份。
虽然研究的方向不同,但是还是有点心得可以讨论一下。
VB无论是在读文件或写文件上,操作2GB大小的文件都比较困难,超出一定的范围就无法
读或写了,曾经有人专门发过大文件操作的帖子,你也可以去看看。
对vb操控超2gb读写上这个已经有一定经验了不担心,(只是api怎么在ftp传输时超2g后面恐怕要花点时间).对winsock有个基本了解,一开始也想直接操控winsock来的.
不过写了winsock登陆,超时判断等后觉得实在是用winsock写出来过于麻烦了恐怕还没这个能力就打算用api来写看样子又是遇上麻烦问题了-_-!命真苦啊.如果哪位高人这方面经验丰富能指导一下apifp断点下载超2gb,ftp ssl跟modez的话那就齐了.回报好说请高人们联系我
之前做过winsock登陆ftp并做一些查询信息的代码.中间涉及到网强延迟(比如电信的机器访问网通的ftp),感觉很麻烦.....还有就是偶尔未知原因,或网络延迟过大,让winsock发出查询后,让程序不能正确收到回应就停顿了。但这种情况很少出现,非常难排查原因.要是这些地方能有什么好办法的话可能也真还是用winsock来得彻底现在就是是看要是ftp方面的api功能够用了的话,会在开发上省不少事,免得直接操控winsock
续传仍旧还没有着落....上帝啊
就不说VB的运行效率如何,即使采用VC开发这方面的效率也差不了多少,因为就网速而言,
即使你在内网中跑FTP,也就是100M bit,VB处理这些东西的速度还是可以的,更加不用说
Internet。除非你的程序有问题,否则不会有什么速度上很大的差别。
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