[急]VB高手进来帮忙:有关FTP下载文件的疑问?---主要使用internet transfer控件,实在是搞不懂,7~~~~~
大致应用逻辑为:公司有2台I/O服务器,主要提供数据文件,一台为主机,一台辅助机(备用)。另有一台应用服务器,定时从这二台I/O服务器提取数据文件。
我实现方法为:为二台I/O服务器配置了FTP站点,数据文件都存放在/FTP下,分别以日期保存(比如\20041018);应用服务器运行一个用vb写的程序,定时(每分钟)提取相应的文件---一次可能提取多个文件。
现在问题是:我用vb写的应用程序,采用internet transfer控件的FTP方式提取文件(源码附后)。当同时提取多个文件时,使用for循环依次提取,每次执行系统操作:
1。ping两台i/o服务器,如果通往下走;失败,程序结束
2。从主服务器提取文件,成功则写入成功标志,同时开始提取下一个文件;如果失败,执行3
3。从辅助服务器提取文件,成功则写入成功标志,同时开始提取下一个文件
当我单步调试程序时,文件都能够顺利下载到应用服务器;如果让程序自动运行,总会有写文件丢失。而且丢失的文件,日志上记录成功。感觉是不知道如何丢了???
--------------------------------------请高手关注一下,帮个忙----------
1)----for循环:
For i = 0 To iNum - 1
'设置数据文件名
temp_date = DateAdd("n", i, start_time)
ls_file = Format(temp_date, "yyyymmddhhmm") & ".txt"
ls_dir = Left(Trim(ls_file), 8)
'如果两台服务器都连接不上,则结束程序
If Not connect_server() Then
error_str = "两台服务器都连接不上,则结束程序"
Call Log_Add(error_str)
End
End If
'调用提取数据文件函数
If Download_File(ls_dir, ls_file) Then
'文件提取成功,更新最后归档日期
Call Write_DB(ls_file)
Else
'添加失败日志
error_str = ls_file + "读取失败!"
Call Log_Add(error_str)
End If
'添加日志3:
error_str = "**********对" + ls_file + "操作结束!********"
Call Log_Add(error_str)
Next i
2)---从服务器提取文件函数
Private Function Download_File(ls_dir As String, ls_file As String) As Boolean
On Error GoTo ErrorHandle
Download_File = False
'******下载文件前先判断要保存文件的目录是否存在,不存在则建立一个保存文件的目录*****
.......(省略)
'1.先从主机提取数据文件
'On Error GoTo ErrorAttacth
'如果从主机提取文件成功,则退出
If Download_From_Server1(ls_dir, ls_file) Then
Set objFile = Nothing
Download_File = True
error_str = "从主服务器提取文件成功!"
Call Log_Add(error_str)
Exit Function
End If
'2.如果主机提取文件失败,则从辅助机提取
If Download_From_Server2(ls_dir, ls_file) Then
Download_File = True
error_str = "从辅助服务器提取文件成功!"
Call Log_Add(error_str)
End If
Set objFile = Nothing
Exit Function
ErrorHandle:
' MsgBox "异常原因:" & Err.Source & vbCrLf & _
' "异常编码:" & Err.Number & vbCrLf & _
' "异常描述:" & Err.Description
error_str = "从服务器提取文件失败,错误信息如下:" + Err.Source & Err.Description
Call Log_Add(error_str)
Set objFile = Nothing
Download_File = False
End Function
3)------'从主服务器通过FTP方式提取文件
Public Function Download_From_Server1(ls_dir As String, ls_file As String) As Boolean
On Error GoTo ErrorHandle
Dim opestr As String '定义操作字符串
With Form1.Inet1
.RemoteHost = RemoteHost_1
.Protocol = icFTP
.UserName = UserName_1
.Password = PassWord_1
.RequestTimeout = 200
.Document = ls_ftp_dir + "/" + ls_dir + "/" + ls_file
End With
opestr = "RECV " & Form1.Inet1.Document & _
" " & ls_to_dir & "\tmp\" & ls_file
Form1.Inet1.Execute , opestr
Dim i As Integer
For i = 1 To 6000
DoEvents
Next
' While Connect_State <> 12
' DoEvents
' Wend
Form1.Inet1.Execute , "QUIT"
Form1.Inet1.Cancel
Download_From_Server1 = True
'记录归档日期
Call Write_DB(ls_file)
Exit Function
ErrorHandle:
error_str = "从主服务器提取文件发生异常,错误信息如下:" + Err.Source & Err.Description
Call Log_Add(error_str)
Form1.Inet1.Cancel
Download_From_Server1 = False
End Function