[急]VB高手进来帮忙:有关FTP下载文件的疑问?---主要使用internet transfer控件,实在是搞不懂!解决完立马放分,不够再加

zhanchifeixiang 2004-10-20 11:47:57
大致应用逻辑为:公司有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
...全文
66 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dayy 2004-10-20
  • 打赏
  • 举报
回复
不懂,up
zhanchifeixiang 2004-10-20
  • 打赏
  • 举报
回复
实在找不到地方了,多谢。我试试
houzx 2004-10-20
  • 打赏
  • 举报
回复
放在这版不合适吧,execute后应该这样,加延时不行吧!
Form1.Inet1.Execute , opestr

isRight = Form1.Inet1.StillExecuting
Do While isRight
isRight = Form1.Inet1.StillExecuting
DoEvents
Loop

执行下载用get也可
Inet1.Execute strUrl, "GET " & strSource & " " & strDest
zhanchifeixiang 2004-10-20
  • 打赏
  • 举报
回复
TO houzx() :
请问:
isRight = Form1.Inet1.StillExecuting
Do While isRight
isRight = Form1.Inet1.StillExecuting
DoEvents
Loop
会不会出现down机现象,也就是说Form1.Inet1.StillExecuting一直在执行,isright永远为false?
因为程序要自动运行,可能无人看管,如果出现上述现象,我要faint~~~

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧