VB的FTP功能使用wininet.dll接口问题,求解
时间:2011-11-18
来源:互联网
在网上下载了一个CLSFTP的类,上传下载都没有问题,但是里面有个方法不知道该怎么用?
想实现的功能是:
进入FTP的目录,查询文件列表,如果文件名“20111118080024_***.***”比本地的最大文件名都大(字符对比),就下载;
然后定时刷新FTP目录循环下载,也可以对比文件的创建时间。
下面这个方法是调用wininet.dll的FtpFindFirstFile(m_hSession&, _FullDir$ & Filter$, WFD, _INTERNET_FLAG_RELOAD Or _INTERNET_FLAG_NO_CACHE_WRITE, 0&)方法,我定义了
Dim GetFileNames$(), GetFileSizes&()
Dim a As New clsftp
然后调用
j = a.GetDirListing(GetFileNames$(), GetFileSizes&())
后面就不知道该怎么用了,使用UBOUND(GETFILENAMES())都会显示错误,大家帮忙看下~
------------------------------------------------
Public Function GetDirListing&(FileNames$(), FileSizes&(), Optional ByVal SubDir$ = vbNullString)
On Local Error GoTo Handler
Dim WFD As WIN32_FIND_DATA
Dim Filter$
Dim hFind&, hFindConnect&
Dim FileSize&
Dim TempFileName$, TempFileSize&
Dim FullDir$
Dim i%
GetDirListing& = FAILURE&
Screen.MousePointer = vbHourglass
'Obtain the current FTP path
Filter$ = "*.*"
FullDir$ = m_Dir$ & SubDir$
AddRemFwdSlash FullDir$, 1
'If not connected, raise an error
If m_hSession& = NO_CONNECTION& Then
Err.Raise ERR_NOT_CONNECTED_TO_SITE, "clsFTP:PutFile", ERR_NO_CONNECTION$
End If
'Connection handles used by the FtpFindFirstFile
'API go out of scope once the files are
'listed, therefore it can not be reused.
'This restriction is handled by obtaining
'a fresh connection handle each time a call
'to FtpFindFirstFile is required, and releasing
'it once finished.
hFindConnect& = GetInternetConnectHandle()
hFind& = FtpFindFirstFile(m_hSession&, _
FullDir$ & Filter$, WFD, _
INTERNET_FLAG_RELOAD Or _
INTERNET_FLAG_NO_CACHE_WRITE, 0&)
If hFind& Then
i% = 0
Do
ReDim Preserve FileNames$(i%)
ReDim Preserve FileSizes&(i%)
TempFileName$ = ClipNull(WFD.cFileName)
If Len(TempFileName$) Then
If WFD.dwFileAttributes And vbDirectory Then
TempFileName$ = TempFileName$ & FWDSLASH$
TempFileSize& = 0
Else
TempFileSize& = WFD.nFileSizeLow
End If
FileNames$(i%) = TempFileName$
FileSizes&(i%) = TempFileSize&
End If
'Continue while valid
i% = i% + 1
Loop While InternetFindNextFile(hFind&, WFD)
End If 'If hFind&
InternetCloseHandle hFindConnect&
InternetCloseHandle hFind&
Screen.MousePointer = vbDefault
GetDirListing& = SUCCESS&
ExitProc:
Exit Function
Handler:
GetDirListing& = Err.Number
Resume ExitProc
End Function
想实现的功能是:
进入FTP的目录,查询文件列表,如果文件名“20111118080024_***.***”比本地的最大文件名都大(字符对比),就下载;
然后定时刷新FTP目录循环下载,也可以对比文件的创建时间。
下面这个方法是调用wininet.dll的FtpFindFirstFile(m_hSession&, _FullDir$ & Filter$, WFD, _INTERNET_FLAG_RELOAD Or _INTERNET_FLAG_NO_CACHE_WRITE, 0&)方法,我定义了
Dim GetFileNames$(), GetFileSizes&()
Dim a As New clsftp
然后调用
j = a.GetDirListing(GetFileNames$(), GetFileSizes&())
后面就不知道该怎么用了,使用UBOUND(GETFILENAMES())都会显示错误,大家帮忙看下~
------------------------------------------------
Public Function GetDirListing&(FileNames$(), FileSizes&(), Optional ByVal SubDir$ = vbNullString)
On Local Error GoTo Handler
Dim WFD As WIN32_FIND_DATA
Dim Filter$
Dim hFind&, hFindConnect&
Dim FileSize&
Dim TempFileName$, TempFileSize&
Dim FullDir$
Dim i%
GetDirListing& = FAILURE&
Screen.MousePointer = vbHourglass
'Obtain the current FTP path
Filter$ = "*.*"
FullDir$ = m_Dir$ & SubDir$
AddRemFwdSlash FullDir$, 1
'If not connected, raise an error
If m_hSession& = NO_CONNECTION& Then
Err.Raise ERR_NOT_CONNECTED_TO_SITE, "clsFTP:PutFile", ERR_NO_CONNECTION$
End If
'Connection handles used by the FtpFindFirstFile
'API go out of scope once the files are
'listed, therefore it can not be reused.
'This restriction is handled by obtaining
'a fresh connection handle each time a call
'to FtpFindFirstFile is required, and releasing
'it once finished.
hFindConnect& = GetInternetConnectHandle()
hFind& = FtpFindFirstFile(m_hSession&, _
FullDir$ & Filter$, WFD, _
INTERNET_FLAG_RELOAD Or _
INTERNET_FLAG_NO_CACHE_WRITE, 0&)
If hFind& Then
i% = 0
Do
ReDim Preserve FileNames$(i%)
ReDim Preserve FileSizes&(i%)
TempFileName$ = ClipNull(WFD.cFileName)
If Len(TempFileName$) Then
If WFD.dwFileAttributes And vbDirectory Then
TempFileName$ = TempFileName$ & FWDSLASH$
TempFileSize& = 0
Else
TempFileSize& = WFD.nFileSizeLow
End If
FileNames$(i%) = TempFileName$
FileSizes&(i%) = TempFileSize&
End If
'Continue while valid
i% = i% + 1
Loop While InternetFindNextFile(hFind&, WFD)
End If 'If hFind&
InternetCloseHandle hFindConnect&
InternetCloseHandle hFind&
Screen.MousePointer = vbDefault
GetDirListing& = SUCCESS&
ExitProc:
Exit Function
Handler:
GetDirListing& = Err.Number
Resume ExitProc
End Function
作者: kings23 发布时间: 2011-11-18
hFind& = FtpFindFirstFile(m_hSession&, _
FullDir$ & Filter$, WFD, _
INTERNET_FLAG_RELOAD Or _
INTERNET_FLAG_NO_CACHE_WRITE, 0&)
这里老是找不到文件,导致 hFind&=0直接往下跳转~
FullDir$ & Filter$, WFD, _
INTERNET_FLAG_RELOAD Or _
INTERNET_FLAG_NO_CACHE_WRITE, 0&)
这里老是找不到文件,导致 hFind&=0直接往下跳转~
作者: kings23 发布时间: 2011-11-18
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28