Option Explicit Public Const MAX_PATH = 260 Public Const INTERNET_FLAG_RELOAD = &H80000000 Public Const NO_ERROR = 0 Public Const FILE_ATTRIBUTE_READONLY = &H1 Public Const FILE_ATTRIBUTE_HIDDEN = &H2 Public Const FILE_ATTRIBUTE_SYSTEM = &H4 Public Const FILE_ATTRIBUTE_DIRECTORY = &H10 Public Const FILE_ATTRIBUTE_ARCHIVE = &H20 Public Const FILE_ATTRIBUTE_NORMAL = &H80 Public Const FILE_ATTRIBUTE_TEMPORARY = &H100 Public Const FILE_ATTRIBUTE_COMPRESSED = &H800 Public Const FILE_ATTRIBUTE_OFFLINE = &H1000 Public Const INTERNET_FLAG_PASSIVE = &H8000000 Public Const FORMAT_MESSAGE_FROM_HMODULE = &H800 Public Const GENERIC_READ = &H80000000 Public Const GENERIC_WRITE = &H40000000Type WIN32_FIND_DATA dwFileAttributes As Long ftCreationTime As Currency ftLastAccessTime As Currency ftLastWriteTime As Currency nFileSizeHigh As Long nFileSizeLow As Long dwReserved0 As Long dwReserved1 As Long cFileName As String * MAX_PATH cAlternate As String * 14 End TypePublic Const ERROR_NO_MORE_FILES = 18 Public Const INTERNET_OPEN_TYPE_PRECONFIG = 0 Public Const INTERNET_INVALID_PORT_NUMBER = 0 Public Const INTERNET_SERVICE_FTP = 1 Public Const FTP_TRANSFER_TYPE_BINARY = &H2 Public Const FTP_TRANSFER_TYPE_ASCII = &H1Declare Function FileTimeToLocalFileTime Lib "kernel32" (lpFileTime As Any, lpLocalFileTime As Any) As LongPublic Declare Function FormatMessage Lib "kernel32" Alias "FormatMessageA" (ByVal dwFlags As Long, ByVal lpSource As Long, ByVal dwMessageId As Long, ByVal dwLanguageId As Long, ByVal lpBuffer As String, ByVal nSize As Long, Arguments As Long) As Long Public 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 Boolean Public Declare Function FtpRenameFile Lib "wininet.dll" Alias "FtpRenameFileA" (ByVal hFtpSession As Long, ByVal lpszOldName As String, ByVal lpszNewName As String) As Boolean Public Declare Function FtpCreateDirectory Lib "wininet.dll" Alias "FtpCreateDirectoryA" (ByVal hFtpSession As Long, ByVal lpszName As String) As Boolean Public Declare Function FtpRemoveDirectory Lib "wininet.dll" Alias "FtpRemoveDirectoryA" (ByVal hFtpSession As Long, ByVal lpszName As String) As BooleanPublic Declare Function FtpDeleteFile Lib "wininet.dll" Alias "FtpDeleteFileA" (ByVal hFtpSession As Long, ByVal lpszFileName As String) As Boolean Public Declare Function FtpOpenFile Lib "wininet.dll" Alias "FtpOpenFileA" (ByVal hFtpSession As Long, ByVal sBuff As String, ByVal Access As Long, ByVal Flags As Long, ByVal Context As Long) As Long Public 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 Boolean Public Declare Function FtpSetCurrentDirectory Lib "wininet.dll" Alias "FtpSetCurrentDirectoryA" (ByVal hFtpSession As Long, ByVal lpszDirectory As String) As Boolean Public Declare Function FtpGetCurrentDirectory Lib "wininet.dll" Alias "FtpGetCurrentDirectoryA" (ByVal hFtpSession As Long, ByVal lpszCurrentDirectory As String, lpdwCurrentDirectory As Long) As Boolean Public 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 GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpLibFileName As String) As LongPublic Declare Function InternetFindNextFile Lib "wininet.dll" Alias "InternetFindNextFileA" (ByVal hFind As Long, lpvFindData As WIN32_FIND_DATA) As Long Public Declare Function InternetWriteFile Lib "wininet.dll" (ByVal hFile As Long, ByRef sBuffer As Byte, ByVal lNumBytesToWrite As Long, dwNumberOfBytesWritten As Long) As Integer Public Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByRef sBuffer As Byte, ByVal lNumBytesToRead As Long, dwNumberOfBytesRead As Long) As Integer Public Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Long 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 Long Public 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 Long Public Declare Function InternetGetLastResponseInfo Lib "wininet.dll" Alias "InternetGetLastResponseInfoA" (ByRef lpdwError As Long, ByVal lpszErrorBuffer As String, ByRef lpdwErrorBufferLength As Long) As BooleanConst rDayZeroBias As Double = 109205# ' Abs(CDbl(#01-01-1601#)) Const rMillisecondPerDay As Double = 10000000# * 60# * 60# * 24# / 10000#
Private Hopen As Long Private HConnection As Long Private sUser, sPassword As String Private Const BUFFERSIZE = 255 Private DB As New Connection Private Rs_VER As New Recordset '返回服务器的版本 Private Sub Command1_Click() Dim Data(BUFFERSIZE - 1) As Byte ' array of 100 elements 0 to 99 Dim Written As Long Dim Size As Long Dim Sum As Long Dim lBlock As Long Dim sLocal As String Dim sRemote As String sLocal = App.Path + "\升级版.exe" sRemote = Rs_VER("EXEName") Sum = 0 lBlock = 0
sLocal = Trim(sLocal) sRemote = Trim(sRemote)
Pb.Max = 100 Pb.Min = 0
Pb.Enabled = True If sLocal <> "" And sRemote <> "" Then Size = GetFTPFileSize(sRemote) hFile = FtpOpenFile(HConnection, sRemote, GENERIC_READ, dwType, 0) If hFile = 0 Then MsgBox Err.Description Exit Sub End If
Open sLocal For Binary Access Write As #1 Seek #1, 1 Sum = 1 For lBlock = 1 To Size \ BUFFERSIZE If (InternetReadFile(hFile, Data(0), BUFFERSIZE, Written) = 0) Then MsgBox "错误,不能完成升级", vbOKOnly, "错误" End Close #1 Exit Sub End If Put #1, , Data
DoEvents Sum = Sum + BUFFERSIZE 'RaiseEvent FileTransferProgress(Sum, Size) Next lBlock
ReDim Data2((Size Mod BUFFERSIZE) - 1) As Byte If (InternetReadFile(hFile, Data2(0), Size Mod BUFFERSIZE, Written) = 0) Then MsgBox Err.Description Close #1 Exit Sub End If
Put #1, , Data2
Sum = Sum + (Size Mod BUFFERSIZE) Size = Sum 'RaiseEvent FileTransferProgress(Sum, Size) Close #1
PbValue.Caption = "100%" '下载完成 InternetCloseHandle (hFile) End If End SubPrivate Sub Form_Load() If VER = False Then MsgBox "没有最新版本,不用进行升级", vbOKOnly, "消息" End End If
Hopen = InternetOpen("eDIY FTP Client", INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0) If Hopen = 0 Then MsgBox Err.Description End End If dwType = FTP_TRANSFER_TYPE_BINARY dwSeman = 0 HConnection = 0 If HConnection <> 0 Then InternetCloseHandle HConnection End If 'INTERNET_INVALID_PORT_NUMBER 默认分配的端口号 HConnection = InternetConnect(Hopen, Trim(Rs_VER("ftpserver")), INTERNET_INVALID_PORT_NUMBER, sUser, sPassword, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0) If HConnection = 0 Then MsgBox "错误,不能完成升级", vbOKOnly, "错误" End End If
End Sub '获得文件大小 Private Function GetFTPFileSize(sFile As String) As Long Dim szDir As String Dim hFind As Long Dim nLastError As Long Dim pData As WIN32_FIND_DATA
hFind = FtpFindFirstFile(HConnection, sFile, pData, 0, 0) If hFind = 0 Then MsgBox "错误,不能完成升级", vbOKOnly, "错误" End Exit Function End If
GetFTPFileSize = pData.nFileSizeLow InternetCloseHandle (hFind) End Function '检查是否需要升级 Private Function VER() As Boolean
Dim B() As Byte '保存文件数组 Dim LocalVer() As Byte '本地版本 Dim SlocalVer As String '本地版本字符串形式 '新建版本文件,默认版本为1。0 If Dir(App.Path + "\ver.dat", vbNormal) = "" Then Open App.Path + "\Ver.dat" For Binary As #1 Put #1, , "1.0" Close #1 End If DB.Open "Provider=SQLOLEDB.1;Persist Security Info=false;Initial Catalog=jx;uid=sa;pwd=hkjxxxz;Data Source=cxj" Set Rs_VER = DB.Execute("select * from ver") ReDim LocalVer(0 To FileLen(App.Path + "\ver.dat"))
Open App.Path + "\ver.dat" For Binary As #1 Get #1, 1, LocalVer() Close #1 For i = 0 To UBound(LocalVer) - 1 SlocalVer = SlocalVer + Chr(LocalVer(i)) Next If CSng(SlocalVer) < CSng(Rs_VER("VER")) Then VER = True Else VER = False End If End Function
┏━★━━◆━━★━┓
♂欢|◢CSDN◣|使♂ ▲自由保存帖子,浏览,关注检测
┃迎|◥论坛助手◤|用┃ ▲完善的CSDN客户端工具
┗━☆━━◇━━━☆┛ ▲自动添加签名......让你更快,更爽,更方便地上CSDN...
http://www.csdn.net/expert/topic/573/573604.xml
http://www.chinaok.net/csdn/csdn.zip
Public Const MAX_PATH = 260
Public Const INTERNET_FLAG_RELOAD = &H80000000
Public Const NO_ERROR = 0
Public Const FILE_ATTRIBUTE_READONLY = &H1
Public Const FILE_ATTRIBUTE_HIDDEN = &H2
Public Const FILE_ATTRIBUTE_SYSTEM = &H4
Public Const FILE_ATTRIBUTE_DIRECTORY = &H10
Public Const FILE_ATTRIBUTE_ARCHIVE = &H20
Public Const FILE_ATTRIBUTE_NORMAL = &H80
Public Const FILE_ATTRIBUTE_TEMPORARY = &H100
Public Const FILE_ATTRIBUTE_COMPRESSED = &H800
Public Const FILE_ATTRIBUTE_OFFLINE = &H1000
Public Const INTERNET_FLAG_PASSIVE = &H8000000
Public Const FORMAT_MESSAGE_FROM_HMODULE = &H800
Public Const GENERIC_READ = &H80000000
Public Const GENERIC_WRITE = &H40000000Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As Currency
ftLastAccessTime As Currency
ftLastWriteTime As Currency
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End TypePublic Const ERROR_NO_MORE_FILES = 18
Public Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Public Const INTERNET_INVALID_PORT_NUMBER = 0
Public Const INTERNET_SERVICE_FTP = 1
Public Const FTP_TRANSFER_TYPE_BINARY = &H2
Public Const FTP_TRANSFER_TYPE_ASCII = &H1Declare Function FileTimeToLocalFileTime Lib "kernel32" (lpFileTime As Any, lpLocalFileTime As Any) As LongPublic Declare Function FormatMessage Lib "kernel32" Alias "FormatMessageA" (ByVal dwFlags As Long, ByVal lpSource As Long, ByVal dwMessageId As Long, ByVal dwLanguageId As Long, ByVal lpBuffer As String, ByVal nSize As Long, Arguments As Long) As Long
Public 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 Boolean
Public Declare Function FtpRenameFile Lib "wininet.dll" Alias "FtpRenameFileA" (ByVal hFtpSession As Long, ByVal lpszOldName As String, ByVal lpszNewName As String) As Boolean
Public Declare Function FtpCreateDirectory Lib "wininet.dll" Alias "FtpCreateDirectoryA" (ByVal hFtpSession As Long, ByVal lpszName As String) As Boolean
Public Declare Function FtpRemoveDirectory Lib "wininet.dll" Alias "FtpRemoveDirectoryA" (ByVal hFtpSession As Long, ByVal lpszName As String) As BooleanPublic Declare Function FtpDeleteFile Lib "wininet.dll" Alias "FtpDeleteFileA" (ByVal hFtpSession As Long, ByVal lpszFileName As String) As Boolean
Public Declare Function FtpOpenFile Lib "wininet.dll" Alias "FtpOpenFileA" (ByVal hFtpSession As Long, ByVal sBuff As String, ByVal Access As Long, ByVal Flags As Long, ByVal Context As Long) As Long
Public 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 Boolean
Public Declare Function FtpSetCurrentDirectory Lib "wininet.dll" Alias "FtpSetCurrentDirectoryA" (ByVal hFtpSession As Long, ByVal lpszDirectory As String) As Boolean
Public Declare Function FtpGetCurrentDirectory Lib "wininet.dll" Alias "FtpGetCurrentDirectoryA" (ByVal hFtpSession As Long, ByVal lpszCurrentDirectory As String, lpdwCurrentDirectory As Long) As Boolean
Public 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 GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpLibFileName As String) As LongPublic Declare Function InternetFindNextFile Lib "wininet.dll" Alias "InternetFindNextFileA" (ByVal hFind As Long, lpvFindData As WIN32_FIND_DATA) As Long
Public Declare Function InternetWriteFile Lib "wininet.dll" (ByVal hFile As Long, ByRef sBuffer As Byte, ByVal lNumBytesToWrite As Long, dwNumberOfBytesWritten As Long) As Integer
Public Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByRef sBuffer As Byte, ByVal lNumBytesToRead As Long, dwNumberOfBytesRead As Long) As Integer
Public Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Long
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 Long
Public 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 Long
Public Declare Function InternetGetLastResponseInfo Lib "wininet.dll" Alias "InternetGetLastResponseInfoA" (ByRef lpdwError As Long, ByVal lpszErrorBuffer As String, ByRef lpdwErrorBufferLength As Long) As BooleanConst rDayZeroBias As Double = 109205# ' Abs(CDbl(#01-01-1601#))
Const rMillisecondPerDay As Double = 10000000# * 60# * 60# * 24# / 10000#
Private HConnection As Long
Private sUser, sPassword As String
Private Const BUFFERSIZE = 255
Private DB As New Connection
Private Rs_VER As New Recordset '返回服务器的版本
Private Sub Command1_Click()
Dim Data(BUFFERSIZE - 1) As Byte ' array of 100 elements 0 to 99
Dim Written As Long
Dim Size As Long
Dim Sum As Long
Dim lBlock As Long
Dim sLocal As String
Dim sRemote As String
sLocal = App.Path + "\升级版.exe"
sRemote = Rs_VER("EXEName")
Sum = 0
lBlock = 0
sLocal = Trim(sLocal)
sRemote = Trim(sRemote)
Pb.Max = 100
Pb.Min = 0
Pb.Enabled = True
If sLocal <> "" And sRemote <> "" Then
Size = GetFTPFileSize(sRemote)
hFile = FtpOpenFile(HConnection, sRemote, GENERIC_READ, dwType, 0)
If hFile = 0 Then
MsgBox Err.Description
Exit Sub
End If
Open sLocal For Binary Access Write As #1
Seek #1, 1
Sum = 1
For lBlock = 1 To Size \ BUFFERSIZE
If (InternetReadFile(hFile, Data(0), BUFFERSIZE, Written) = 0) Then
MsgBox "错误,不能完成升级", vbOKOnly, "错误"
End
Close #1
Exit Sub
End If
Put #1, , Data
Pb.Value = CSng(lBlock * BUFFERSIZE / Size) * 100 '进度条的指
PbValue.Caption = Left(Pb.Value, 3) + "%" '进度条显示的值
DoEvents
Sum = Sum + BUFFERSIZE
'RaiseEvent FileTransferProgress(Sum, Size)
Next lBlock
ReDim Data2((Size Mod BUFFERSIZE) - 1) As Byte
If (InternetReadFile(hFile, Data2(0), Size Mod BUFFERSIZE, Written) = 0) Then
MsgBox Err.Description
Close #1
Exit Sub
End If
Put #1, , Data2
Sum = Sum + (Size Mod BUFFERSIZE)
Size = Sum
'RaiseEvent FileTransferProgress(Sum, Size)
Close #1
PbValue.Caption = "100%" '下载完成
InternetCloseHandle (hFile)
End If
End SubPrivate Sub Form_Load()
If VER = False Then
MsgBox "没有最新版本,不用进行升级", vbOKOnly, "消息"
End
End If
Hopen = InternetOpen("eDIY FTP Client", INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
If Hopen = 0 Then
MsgBox Err.Description
End
End If
dwType = FTP_TRANSFER_TYPE_BINARY
dwSeman = 0
HConnection = 0
If HConnection <> 0 Then
InternetCloseHandle HConnection
End If
'INTERNET_INVALID_PORT_NUMBER 默认分配的端口号
HConnection = InternetConnect(Hopen, Trim(Rs_VER("ftpserver")), INTERNET_INVALID_PORT_NUMBER, sUser, sPassword, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0)
If HConnection = 0 Then
MsgBox "错误,不能完成升级", vbOKOnly, "错误"
End
End If
End Sub
'获得文件大小
Private Function GetFTPFileSize(sFile As String) As Long
Dim szDir As String
Dim hFind As Long
Dim nLastError As Long
Dim pData As WIN32_FIND_DATA
hFind = FtpFindFirstFile(HConnection, sFile, pData, 0, 0)
If hFind = 0 Then
MsgBox "错误,不能完成升级", vbOKOnly, "错误"
End
Exit Function
End If
GetFTPFileSize = pData.nFileSizeLow
InternetCloseHandle (hFind)
End Function
'检查是否需要升级
Private Function VER() As Boolean
Dim B() As Byte '保存文件数组
Dim LocalVer() As Byte '本地版本
Dim SlocalVer As String '本地版本字符串形式
'新建版本文件,默认版本为1。0
If Dir(App.Path + "\ver.dat", vbNormal) = "" Then
Open App.Path + "\Ver.dat" For Binary As #1
Put #1, , "1.0"
Close #1
End If
DB.Open "Provider=SQLOLEDB.1;Persist Security Info=false;Initial Catalog=jx;uid=sa;pwd=hkjxxxz;Data Source=cxj"
Set Rs_VER = DB.Execute("select * from ver")
ReDim LocalVer(0 To FileLen(App.Path + "\ver.dat"))
Open App.Path + "\ver.dat" For Binary As #1
Get #1, 1, LocalVer()
Close #1
For i = 0 To UBound(LocalVer) - 1
SlocalVer = SlocalVer + Chr(LocalVer(i))
Next
If CSng(SlocalVer) < CSng(Rs_VER("VER")) Then
VER = True
Else
VER = False
End If
End Function
一定时间时
用现在以下载文件大小跟他做对比就知道了“
————请问:怎么获得“现在下载的文件大小“,用什么函数(winInet.dll下的)可以获得?