设为首页 收藏本站
查看: 3008|回复: 0

VB6下的FTP

[复制链接]

尚未签到

发表于 2015-5-27 10:05:02 | 显示全部楼层 |阅读模式
vb6的INet控件非常不好用。
  
1:功能有限。
   比方说,从服务器端得到文件的修改时间和大小,这样的功能就没有。
2:不稳定
   出的错误莫名其妙
3:返回的信息有错误
   就像inet.execute ‘put .. ..’之类的命令,找不到失败的消息,网线都拔掉了,居然也不报错。

网上有其他的控件,但是好像不是免费的。

最后,还是选择了直接调用API函数来解决。
这是英文原文:http://support.microsoft.com/default.aspx?scid=kb;en-us;195653

具体的做法很简单(代码来源于上文)
1:获取API


DSC0000.gif DSC0001.gif API
  1 DSC0002.gif Option Explicit
  2Public Const MAX_PATH = 260
  3Public Const INTERNET_FLAG_RELOAD = &H80000000
  4Public Const NO_ERROR = 0
  5Public Const FILE_ATTRIBUTE_READONLY = &H1
  6Public Const FILE_ATTRIBUTE_HIDDEN = &H2
  7Public Const FILE_ATTRIBUTE_SYSTEM = &H4
  8Public Const FILE_ATTRIBUTE_DIRECTORY = &H10
  9Public Const FILE_ATTRIBUTE_ARCHIVE = &H20
10Public Const FILE_ATTRIBUTE_NORMAL = &H80
11Public Const FILE_ATTRIBUTE_TEMPORARY = &H100
12Public Const FILE_ATTRIBUTE_COMPRESSED = &H800
13Public Const FILE_ATTRIBUTE_OFFLINE = &H1000
14Public Const INTERNET_FLAG_PASSIVE = &H8000000
15Public Const FORMAT_MESSAGE_FROM_HMODULE = &H800
16
17Type WIN32_FIND_DATA
18        dwFileAttributes As Long
19        ftCreationTime As Currency
20        ftLastAccessTime As Currency
21        ftLastWriteTime As Currency
22        nFileSizeHigh As Long
23        nFileSizeLow As Long
24        dwReserved0 As Long
25        dwReserved1 As Long
26        cFileName As String * MAX_PATH
27        cAlternate As String * 14
28End Type
29
30
31Public Const ERROR_NO_MORE_FILES = 18
32
33Public Declare Function InternetFindNextFile()Function InternetFindNextFile Lib "wininet.dll" Alias "InternetFindNextFileA" _
34 DSC0003.gif     (ByVal hFind As Long, lpvFindData As WIN32_FIND_DATA) As Long
35   
36 DSC0004.gif DSC0005.gif Public Declare Function FtpFindFirstFile()Function FtpFindFirstFile Lib "wininet.dll" Alias "FtpFindFirstFileA" _
37(ByVal hFtpSession As Long, ByVal lpszSearchFile As String, _
38      lpFindFileData As WIN32_FIND_DATA, ByVal dwFlags As Long, ByVal dwContent As Long) As Long
39
40Declare Function FileTimeToLocalFileTime()Function FileTimeToLocalFileTime Lib "kernel32" (lpFileTime As Any, lpLocalFileTime As Any) As Long
41
42Public Const INTERNET_OPEN_TYPE_PRECONFIG = 0
43Public Const INTERNET_INVALID_PORT_NUMBER = 0
44Public Const INTERNET_SERVICE_FTP = 1
45Public Const FTP_TRANSFER_TYPE_BINARY = &H2
46Public Const FTP_TRANSFER_TYPE_ASCII = &H1
47
48Public Declare Function FtpSetCurrentDirectory()Function FtpSetCurrentDirectory Lib "wininet.dll" Alias "FtpSetCurrentDirectoryA" _
49    (ByVal hFtpSession As Long, ByVal lpszDirectory As String) As Boolean
50
51Public Declare Function FtpGetCurrentDirectory()Function FtpGetCurrentDirectory Lib "wininet.dll" Alias "FtpGetCurrentDirectoryA" _
52   (ByVal hFtpSession As Long, ByVal lpszCurrentDirectory As String, lpdwCurrentDirectory As Long) As Boolean
53   
54Public Declare Function InternetWriteFile()Function InternetWriteFile Lib "wininet.dll" _
55(ByVal hFile As Long, ByRef sBuffer As Byte, ByVal lNumBytesToWite As Long, _
56dwNumberOfBytesWritten As Long) As Integer
57
58Public Declare Function FtpOpenFile()Function FtpOpenFile Lib "wininet.dll" Alias "FtpOpenFileA" _
59(ByVal hFtpSession As Long, ByVal sBuff As String, ByVal Access As Long, ByVal Flags As Long, ByVal Context As Long) As Long
60
61Public Declare Function FtpPutFile()Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" _
62(ByVal hFtpSession As Long, ByVal lpszLocalFile As String, _
63      ByVal lpszRemoteFile As String, _
64      ByVal dwFlags As Long, ByVal dwContext As Long) As Boolean
65      
66      
67
68
69Public Declare Function FtpDeleteFile()Function FtpDeleteFile Lib "wininet.dll" _
70    Alias "FtpDeleteFileA" (ByVal hFtpSession As Long, _
71    ByVal lpszFileName As String) As Boolean
72Public Declare Function InternetCloseHandle()Function InternetCloseHandle Lib "wininet.dll" _
73(ByVal hInet As Long) As Long
74
75Public Declare Function InternetOpen()Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _
76(ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, _
77ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
78
79Public Declare Function InternetConnect()Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" _
80(ByVal hInternetSession As Long, ByVal sServerName As String, ByVal nServerPort As Integer, _
81ByVal sUsername As String, ByVal sPassword As String, ByVal lService As Long, _
82ByVal lFlags As Long, ByVal lContext As Long) As Long
83
84
85Public Declare Function FtpGetFile()Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" _
86(ByVal hFtpSession As Long, ByVal lpszRemoteFile As String, _
87      ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, ByVal dwFlagsAndAttributes As Long, _
88      ByVal dwFlags As Long, ByVal dwContext As Long) As Boolean
89
90
91Const rDayZeroBias As Double = 109205#   ' Abs(CDbl(#01-01-1601#))
92Const rMillisecondPerDay As Double = 10000000# * 60# * 60# * 24# / 10000#
93
94Declare Function InternetGetLastResponseInfo()Function InternetGetLastResponseInfo Lib "wininet.dll" _
95      Alias "InternetGetLastResponseInfoA" _
96       (ByRef lpdwError As Long, _
97       ByVal lpszErrorBuffer As String, _
98       ByRef lpdwErrorBufferLength As Long) As Boolean
99      
100Declare Function FormatMessage()Function FormatMessage Lib "kernel32" Alias "FormatMessageA" _
101(ByVal dwFlags As Long, ByVal lpSource As Long, ByVal dwMessageId As Long, _
102 ByVal dwLanguageId As Long, ByVal lpBuffer As String, ByVal nSize As Long, _
103 Arguments As Long) As Long
104
105Declare Function GetModuleHandle()Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpLibFileName As String) As Long
106
107
108Function Win32ToVbTime()Function Win32ToVbTime(ft As Currency) As Date
109
110    Dim ftl As Currency
111
112    ' Call API to convert from UTC time to local time
113    If FileTimeToLocalFileTime(ft, ftl) Then
114
115        ' Local time is nanoseconds since 01-01-1601
116
117        ' In Currency that comes out as milliseconds
118
119        ' Divide by milliseconds per day to get days since 1601
120
121        ' Subtract days from 1601 to 1899 to get VB Date equivalent
122
123        Win32ToVbTime = CDate((ftl / rMillisecondPerDay) - rDayZeroBias)
124
125    Else
126
127        MsgBox Err.LastDllError
128
129    End If
130
131 DSC0006.gif End Function
132
133
134
2:几个常用命令
  连接命令:
  If hConnection  0 Then
        InternetCloseHandle hConnection
    End If
    hConnection = InternetConnect(hOpen, strFTPIP, INTERNET_INVALID_PORT_NUMBER,  strUser, strPass, INTERNET_SERVICE_FTP, dwSeman, 0)
    If hConnection = 0 Then
        ErrorOut Err.LastDllError, "InternetConnect"
        Exit Sub
    Else
  Put命令
    If (FtpPutFile(hConnection, strLocalFile,strRemoteFile,  dwType, 0) = False) Then
             ErrorOut Err.LastDllError, "FtpPutFile"
             Exit Sub
    Else

others :
FtpGetCurrentDirectory
FtpSetCurrentDirectory
FtpFindFirstFile
InternetFindNextFile
FtpGetFile

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-71137-1-1.html 上篇帖子: Filezilla FTP Server 设置帐号主目录文件夹的方法和多个帐号共享一个文件夹的方法 下篇帖子: 给网站增加解压缩功能,解决上传速度慢或者不支持FTP的问题(要求支持asp.net和SharpZip)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表