CSDN找了半天,没发现有完整的代码.自己东拼西凑,终于解决了.写给和我一样的菜鸟.模块FTP.basOption Explicit
Public Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _
(ByVal sAgent As String, ByVal LAccessType As Long, ByVal sProxyName As String, _
ByVal SProxyBypass As String, ByVal lFlags As Long) As LongPublic Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" _
(ByVal hInternetSession As Long, ByVal sServerName As String, _
ByVal nServerPort As Integer, ByVal sUsername As String, _
ByVal sPassword As String, ByVal lService As Long, _
ByVal lFlags As Long, ByVal lContext As Long) As LongPublic Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" _
(ByVal hFtpSession As Long, ByVal lpszRemoteFile As String, _
ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, _
ByVal dwFlagsAndAttributes As Long, ByVal dwFlags As Long, _
ByVal dwContext As Long) As BooleanPublic Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" _
(ByVal hFtpSession As Long, ByVal lpszLocalFile As String, _
ByVal lpszRemoteFile As String, ByVal dwFlags As Long, _
ByVal dwContext As Long) As BooleanPublic Declare Function FtpDeleteFile Lib "wininet.dll" Alias "FtpDeleteFileA" _
(ByVal hFtpSession As Long, ByVal lpszFileName As String) As BooleanPublic Declare Function FtpRenameFile Lib "wininet.dll" Alias "FtpRenameFileA" _
(ByVal hFtpSession As Long, ByVal lpszExsiting As String, ByVal lpszNew As String) As BooleanPublic Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As IntegerPublic Declare Function FtpFindFirstFile Lib "wininet.dll" Alias "FtpFindFirstFileA" _
(ByVal hFtpSession As Long, ByVal lpszSearchFile As String, _
lpFindFileData As WIN32_FIND_DATA, ByVal dwFlags As Long, _
ByVal dwContent As Long) As LongPublic Declare Function InternetFindNextFile Lib "wininet.dll" Alias "InternetFindNextFileA" _
(ByVal HFind As Long, lpvFndData As WIN32_FIND_DATA) As LongPublic Declare Function FileTimeToLocalFileTime Lib "kernel32" (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Long
Public Declare Function FileTimeToSystemTime Lib "kernel32" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As LongPublic Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End TypePublic Type WIN32_FIND_DATA
dwFilAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * 260
cAlternate As String * 14
End TypePublic Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
"GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As LongType OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End TypeType SYSTEMTIME ' 16 Bytes
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End TypePublic Function Get_ftp_list()
Dim pData As WIN32_FIND_DATA
Dim bRet As Boolean
Dim strItem As String
Dim HFind As Long
Dim InterOpen As Long
Dim InterConn As Long
Dim FileDateTime As String
Dim FileSize As Long InterOpen = InternetOpen("FTP Control", 1, vbNullString, vbNullString, 0)
InterConn = InternetConnect(InterOpen, ServerIp, 0, S_username, S_password, 1, 0, 0) HFind = FtpFindFirstFile(InterConn, "/" + ServerLocalFolder, pData, 0, 0) ' 查找第一个文件或目录 If HFind = 0 Then ' 错误返回0
MsgBox IIf(Err.LastDllError = 18, "This directory is empty!", Err.Description)
Exit Function
End If strItem = Split(pData.cFileName, "")(0)
FileDateTime = Change_time(pData.ftLastWriteTime)
FileSize = pData.nFileSizeLow Debug.Print strItem
Debug.Print FileDateTime
Debug.Print FileSize '查找 FTP 目录中的下一个文件。
bRet = True
Do While bRet
bRet = InternetFindNextFile(HFind, pData)
If bRet Then
strItem = Split(pData.cFileName, "")(0)
FileDateTime = Change_time(pData.ftLastWriteTime)
FileSize = pData.nFileSizeLow
Debug.Print strItem
Debug.Print FileDateTime
Debug.Print FileSize
End If
Loop
InternetCloseHandle InterConn
InternetCloseHandle InterOpen
End FunctionFunction Change_time(Server_time As FILETIME) As String
Dim Local_time As SYSTEMTIME
Dim Server_UTC_time As FILETIME
FileTimeToLocalFileTime Server_time, Server_UTC_time
FileTimeToSystemTime Server_UTC_time, Local_time
Change_time = CStr(Local_time.wYear) + CStr(Local_time.wMonth) + CStr(Local_time.wDay) + CStr(Local_time.wHour) + CStr(Local_time.wMinute)
End Function
Public Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _
(ByVal sAgent As String, ByVal LAccessType As Long, ByVal sProxyName As String, _
ByVal SProxyBypass As String, ByVal lFlags As Long) As LongPublic Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" _
(ByVal hInternetSession As Long, ByVal sServerName As String, _
ByVal nServerPort As Integer, ByVal sUsername As String, _
ByVal sPassword As String, ByVal lService As Long, _
ByVal lFlags As Long, ByVal lContext As Long) As LongPublic Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" _
(ByVal hFtpSession As Long, ByVal lpszRemoteFile As String, _
ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, _
ByVal dwFlagsAndAttributes As Long, ByVal dwFlags As Long, _
ByVal dwContext As Long) As BooleanPublic Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" _
(ByVal hFtpSession As Long, ByVal lpszLocalFile As String, _
ByVal lpszRemoteFile As String, ByVal dwFlags As Long, _
ByVal dwContext As Long) As BooleanPublic Declare Function FtpDeleteFile Lib "wininet.dll" Alias "FtpDeleteFileA" _
(ByVal hFtpSession As Long, ByVal lpszFileName As String) As BooleanPublic Declare Function FtpRenameFile Lib "wininet.dll" Alias "FtpRenameFileA" _
(ByVal hFtpSession As Long, ByVal lpszExsiting As String, ByVal lpszNew As String) As BooleanPublic Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As IntegerPublic Declare Function FtpFindFirstFile Lib "wininet.dll" Alias "FtpFindFirstFileA" _
(ByVal hFtpSession As Long, ByVal lpszSearchFile As String, _
lpFindFileData As WIN32_FIND_DATA, ByVal dwFlags As Long, _
ByVal dwContent As Long) As LongPublic Declare Function InternetFindNextFile Lib "wininet.dll" Alias "InternetFindNextFileA" _
(ByVal HFind As Long, lpvFndData As WIN32_FIND_DATA) As LongPublic Declare Function FileTimeToLocalFileTime Lib "kernel32" (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Long
Public Declare Function FileTimeToSystemTime Lib "kernel32" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As LongPublic Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End TypePublic Type WIN32_FIND_DATA
dwFilAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * 260
cAlternate As String * 14
End TypePublic Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
"GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As LongType OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End TypeType SYSTEMTIME ' 16 Bytes
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End TypePublic Function Get_ftp_list()
Dim pData As WIN32_FIND_DATA
Dim bRet As Boolean
Dim strItem As String
Dim HFind As Long
Dim InterOpen As Long
Dim InterConn As Long
Dim FileDateTime As String
Dim FileSize As Long InterOpen = InternetOpen("FTP Control", 1, vbNullString, vbNullString, 0)
InterConn = InternetConnect(InterOpen, ServerIp, 0, S_username, S_password, 1, 0, 0) HFind = FtpFindFirstFile(InterConn, "/" + ServerLocalFolder, pData, 0, 0) ' 查找第一个文件或目录 If HFind = 0 Then ' 错误返回0
MsgBox IIf(Err.LastDllError = 18, "This directory is empty!", Err.Description)
Exit Function
End If strItem = Split(pData.cFileName, "")(0)
FileDateTime = Change_time(pData.ftLastWriteTime)
FileSize = pData.nFileSizeLow Debug.Print strItem
Debug.Print FileDateTime
Debug.Print FileSize '查找 FTP 目录中的下一个文件。
bRet = True
Do While bRet
bRet = InternetFindNextFile(HFind, pData)
If bRet Then
strItem = Split(pData.cFileName, "")(0)
FileDateTime = Change_time(pData.ftLastWriteTime)
FileSize = pData.nFileSizeLow
Debug.Print strItem
Debug.Print FileDateTime
Debug.Print FileSize
End If
Loop
InternetCloseHandle InterConn
InternetCloseHandle InterOpen
End FunctionFunction Change_time(Server_time As FILETIME) As String
Dim Local_time As SYSTEMTIME
Dim Server_UTC_time As FILETIME
FileTimeToLocalFileTime Server_time, Server_UTC_time
FileTimeToSystemTime Server_UTC_time, Local_time
Change_time = CStr(Local_time.wYear) + CStr(Local_time.wMonth) + CStr(Local_time.wDay) + CStr(Local_time.wHour) + CStr(Local_time.wMinute)
End Function
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货