用Inet1做了个在线更新程序,但有个问题一直搞不好,现500分求解
52694 2003-06-14 11:14:40 就是把要更新的文件路径存在数据库里,然后读出来一个一个的更新。
就是利用循环更新多个文件,但老出错。何故?
附源代码:
Private Type SHFILEOPSTRUCT
hwnd As Long
wFunc As Long '对文件的操作指令
pFrom As String '源文件或路径
pTo As String '目的文件或路径
fFlags As Integer '操作标志
fAnyOperationsAborted As Long
hNameMappings As Long
lpszProgressTitle As String
End Type
Private Declare Function SHFileOperation Lib _
"shell32" _
(lpFileOp As SHFILEOPSTRUCT) As Long
Private Declare Function GetWindowsDirectory _
Lib "kernel32" Alias "GetWindowsDirectoryA" _
(ByVal lpBuffer As String, ByVal nSize As _
Long) As Long
Const FO_COPY = &H2
Const FO_DELETE = &H3
Const FO_MOVE = &H1
Const FO_RENAME = &H4
Const FOF_ALLOWUNDO = &H40
Dim DirString As String
'-------------------------
Private m_lngDocSize As Long '该变量用于存储Web页面文件大小
'Private Const strURL = "http://www.wupanwang.com/zip/wupan2000.exe"
'Private Const strURL = "http://www.hlyex.com/csd.exe"
'Private Const FileName = "wupan2000.exe"
'Private Const FileName = "csd.exe"
'------------------------------------
Private strurl As String
Private filename As String
Private Sub Command1_Click()
Call gt
End Sub
Private Sub gt()
'用FOR 循环做试验
For y = 1 To 5
strurl = "http://www.wupanwang.com/zip/wupan2000.exe"
filename = y & wupan2000.exe
'文件大小值复位
m_lngDocSize = 0
'复位进度条控件
ProgressBar1.Value = 0.001
'显示进度的标签内容设为空
lblProgressInfo.Caption = ""
'定义ITC控件使用的协议为HTTP协议
Inet1.Protocol = icHTTP
'调用Execute方法向Web服务器发送HTTP请求
Inet1.Execute Trim$(strurl), "GET"
lblProgressInfo.Caption = "请等待..."
Next
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Shell App.Path & "\" & filename, vbNormalFocus
End Sub
Private Sub Inet1_StateChanged(ByVal State As Integer)
Dim binBuffer() As Byte
Dim sngProgerssValue As Single
Dim iBlock As Long
'On Error Resume Next
iBlock = 0
On Error Resume Next
Kill App.Path & "\" & filename
Select Case State
Case icResponseCompleted
'打开文件供写入
Open App.Path & "\" & filename For Binary Access Write As #1
Do '从缓冲区读取数据
DoEvents
binBuffer = Inet1.GetChunk(512, icByteArray)
'strText = strText & strBuffer
iBlock = iBlock + 1
If m_lngDocSize > 0 Then
'获得进度百分比值
sngProgerssValue = Int((iBlock * 512 / m_lngDocSize) * 100)
'更新进度标签显示内容
lblProgressInfo.Caption = "已下载 " & CStr(iBlock * 512) & " 字节 (" & CStr(sngProgerssValue) & "%)"
'用新值更新进度条控件
ProgressBar1.Value = sngProgerssValue
'写入文件
Put #1, , binBuffer()
End If
Loop Until iBlock * 512 >= m_lngDocSize
'关闭文件
Close #1
MsgBox "升级完成", vbOKOnly Or vbInformation, "在线升级"
'Shell App.Path & "\" & filename
'Call gt
Case icResponseReceived
If m_lngDocSize = 0 Then
'读取页面文件大小
If Len(Inet1.GetHeader("Content-Length")) > 0 Then
m_lngDocSize = CLng(Inet1.GetHeader("Content-Length"))
If (m_lngDocSize = 0) Then
MsgBox "读取远程数据出错", vbOKOnly Or vbExclamation, "在线升级"
End If
Else
MsgBox "ERROR!", vbOKOnly Or vbExclamation, "在线升级"
End If
End If
Case icError
MsgBox "与主机通信出错", vbOKOnly Or vbExclamation, "在线升级"
Case icResolvingHost
lblProgressInfo.Caption = "正在查找主机..."
Case icHostResolved
lblProgressInfo.Caption = "已经找到主机"
Case icConnecting
lblProgressInfo.Caption = "正在联系主机"
Case icConnected
lblProgressInfo.Caption = "已经连接到主机"
Case icRequesting
lblProgressInfo.Caption = "正在发送请求..."
Case icRequestSent
lblProgressInfo.Caption = "成功发送请求"
Case icReceivingResponse
lblProgressInfo.Caption = "正在接收回应..."
Case icDisconnecting
lblProgressInfo.Caption = "正在断开连接..."
Case icDisconnected
lblProgressInfo.Caption = "已经断开连接"
End Select
End Sub