Foxtable(狐表)用户栏目专家坐堂 → FTP都加上了TRY语句,还是会报错


  共有95人关注过本帖树形打印复制链接

主题:FTP都加上了TRY语句,还是会报错

帅哥,在线噢!
9EQ98
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:511 积分:4674 威望:0 精华:0 注册:2014/1/16 16:55:00
FTP都加上了TRY语句,还是会报错  发帖心情 Post By:2024/7/5 13:50:00 [只看该作者]

图片点击可在新窗口打开查看

If _FTP_正在下载 = True Then
    Return True 
End If 
_FTP_正在下载 = True

' 下载所有扩展列附件(图片、文件)
Dim FTP As New FTPClient
FTP.Host = _FTP_Abbr_Host
FTP.Password = _FTP_Abbr_Pass
FTP.Account = _FTP_Abbr_Acco
FTP.Port = _FTP_Abbr_Port
FTP.RootDir = _FTP_Abbr_Root
FTP.Connect

If FTP.Connect = False Then
    If Forms("登录日志").Opened = True AndAlso Forms("登录日志").Controls.Contains("DT_List") = True Then
        Dim MESS As WinForm.ListBox = Forms("登录日志").Controls("DT_List")
        MESS.ComboList = MESS.ComboList & "|" & "FTP连接失败!" & Date.Now() 
    End If
    _FTP_正在下载 = False
    Return False
Else
    If Forms("登录日志").Opened = True AndAlso Forms("登录日志").Controls.Contains("DT_List") = True Then
        Dim MESS As WinForm.ListBox = Forms("登录日志").Controls("DT_List")
        MESS.ComboList = MESS.ComboList & "|" & "FTP目录" & FTP.RootDir & "|" & "FTP启动" & Date.Now() 
    End If 
End If

Dim 成功 As Integer = 0
Dim 失败 As Integer = 0
Dim 跳过 As Integer = 0
Dim 执行 As Integer = 0
Dim 丢失 As Integer = 0
Dim 条件 As String = " And _New_Acc = '" & _登录人 & "'"
If Functions.Execute("Acc_Into", "{系统管理组}|{报表打印组}") = True Then
    条件 = ""
End if

For Each DT As DataTable In DataTables
    For Each DC As DataCol In DT.DataCols
        If DC.ExtendType = ExtendTypeEnum.Images OrElse DC.ExtendType = ExtendTypeEnum.File OrElse DC.ExtendType = ExtendTypeEnum.FileS Then
            Dim drs As List(Of DataRow) = DT.SQLSelect(DC.Name & " Is Not Null " & 条件) 
            For Each dr As DataRow In drs
                Dim Files As String = DR(DC.NAME)
                Dim Values() As String
                Values = Files.Split(vbCrLf)
                For Index As Integer = 0 To Values.Length - 1
                    If _FTP_下载终止 = True Then
                        Return True 
                    End If 
                    执行 = 执行 + 1
                    Dim NetFile As String = Values(Index)
                    If NetFile = "" Then
                        Continue For ' 下一个循环
                    End If 
                    
                    ' 排除那些文件
                    '                    If NetFile.Contains("png") OrElse NetFile.Contains("pg") OrElse NetFile.Contains("ls") Then
                    '                        Continue For ' 下一个循环
                    '                    End If 
                    Dim LocFile As String = ProjectPath & "\RemoteFiles\" & NetFile.Replace("/", "\")
                    LocFile = LocFile.Replace("\\", "\")
                    
                    If FTP.Connect = False Then ' FTP连接失败时
                        StatusBar.Message3 = "FTP连接失败!" & Date.Now()
                        _FTP_正在下载 = False 
                        Return False
                    End If
                    Try 
                        If ftp.FileExists(NetFile) = False Then '如果存在则下载
                            丢失 = 丢失 + 1
                            Continue For ' 下一个循环
                        End If
                    Catch ex As Exception 
                        If Forms("登录日志").Opened = True AndAlso Forms("登录日志").Controls.Contains("DT_List") = True Then
                            Dim MESS As WinForm.ListBox = Forms("登录日志").Controls("DT_List")
                            MESS.ComboList = MESS.ComboList & "|" & "FTP远程检查异常:" & DT.Name & "  " & DC.Name
                            MESS.ComboList = MESS.ComboList & "|" & NetFile
                            MESS.ComboList = MESS.ComboList & "|" & "√" & 成功 & "×" & 失败 & "☆" & 丢失 & "⌒" & 跳过 & "/" & 执行 
                        End If
                        'Continue For ' 下一个循环
                    End Try 
                    
                    Try
                        If FileSys.FileExists(LocFile) Then
                            Dim NetSize As Integer
                            NetSize = ftp.GetFileSize(NetFile)
                            Dim Locifo As New FileInfo(LocFile)
                            Dim LocSize As Integer = Locifo.Length 
                            'Output.Show(NetSize & "  " & LocSize)
                            If NetSize = LocSize Then
                                跳过 = 跳过 + 1
                                Continue For ' 下一个循环
                            End If
                        End If
                    Catch ex As Exception 
                        If Forms("登录日志").Opened = True AndAlso Forms("登录日志").Controls.Contains("DT_List") = True Then
                            Dim MESS As WinForm.ListBox = Forms("登录日志").Controls("DT_List")
                            MESS.ComboList = MESS.ComboList & "|" & "FTP文件比较异常:" & DT.Name & "  " & DC.Name
                            MESS.ComboList = MESS.ComboList & "|" & NetFile
                        End If
                        'Continue For ' 下一个循环
                    End Try 
                    
                    If FTP.Connect = False Then ' FTP连接失败时
                        StatusBar.Message3 = "FTP连接失败!" & Date.Now()
                        _FTP_正在下载 = False 
                        Return False
                    End If
                    If FTP.Connect = True Then
                        Try
                            If ftp.Download(NetFile, LocFile) Then
                                成功 = 成功 + 1
                            Else
                                失败 = 失败 + 1
                            End If
                        Catch ex As Exception 
                            If Forms("登录日志").Opened = True AndAlso Forms("登录日志").Controls.Contains("DT_List") = True Then
                                Dim MESS As WinForm.ListBox = Forms("登录日志").Controls("DT_List")
                                MESS.ComboList = MESS.ComboList & "|" & "FTP下载异常:" & DT.Name & "  " & DC.Name
                                MESS.ComboList = MESS.ComboList & "|" & NetFile
                            End If 
                        End Try 
                    End If
                    If _FTP_下载终止 = True Then
                        Return True 
                    End If 
                Next
            Next
            StatusBar.Message3 = "√" & 成功 & "×" & 失败 & "☆" & 丢失 & "⌒" & 跳过 & "/" & 执行 & "  " & DT.Name & "  " & DC.Name 
        End If
    Next
Next


StatusBar.Message3 = "√" & 成功 & "×" & 失败 & "☆" & 丢失 & "⌒" & 跳过 & "|" & 执行
If Forms("登录日志").Opened = True AndAlso Forms("登录日志").Controls.Contains("DT_List") = True Then
    Dim MESS As WinForm.ListBox = Forms("登录日志").Controls("DT_List")
    MESS.ComboList = MESS.ComboList & "|" & StatusBar.Message3
    MESS.ComboList = MESS.ComboList & "|" & "FTP完成下载" 
End If
_FTP_完成下载 = True
_FTP_正在下载 = False

Return True


图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107896 积分:548849 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/7/5 14:08:00 [只看该作者]

提示的意思是集合已经被更改,无法进行遍历处理。这个和ftp应该没有关系,应该是try之外出现的错误

 回到顶部
帅哥,在线噢!
9EQ98
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:511 积分:4674 威望:0 精华:0 注册:2014/1/16 16:55:00
  发帖心情 Post By:2024/7/5 14:41:00 [只看该作者]

为什么FTP检查文件是否存在,也会出错.那份文件在FTP文件服务器上是存在的
ftp.FileExists(NetFile) = False  这一句为什么会报错,执行了 Catch ex As Exception 做了记录
 Try 
                        If ftp.FileExists(NetFile) = False Then '如果存在则下载
                            丢失 = 丢失 + 1
                            Continue For ' 下一个循环
                        End If
                    Catch ex As Exception 
                        If Forms("登录日志").Opened = True AndAlso Forms("登录日志").Controls.Contains("DT_List") = True Then
                            Dim MESS As WinForm.ListBox = Forms("登录日志").Controls("DT_List")
                            MESS.ComboList = MESS.ComboList & "|" & "FTP远程检查异常:" & DT.Name & "  " & DC.Name
                            MESS.ComboList = MESS.ComboList & "|" & NetFile
                            MESS.ComboList = MESS.ComboList & "|" & "√" & 成功 & "×" & 失败 & "☆" & 丢失 & "⌒" & 跳过 & "/" & 执行 
                        End If
                        'Continue For ' 下一个循环
                    End Try 
[此贴子已经被作者于2024/7/5 14:42:57编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107896 积分:548849 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/7/5 14:58:00 [只看该作者]

看具体什么错误?

 Try 
                        Iftp.FileExists(NetFile) = False Then '如果存在则下载
                            丢失 = 丢失 + 1
                            Continue For ' 下一个循环
                        End If
                    Catch ex As Exception 
msgbox(ex.message)
……

 回到顶部
帅哥,在线噢!
9EQ98
  5楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:511 积分:4674 威望:0 精华:0 注册:2014/1/16 16:55:00
  发帖心情 Post By:2024/7/5 16:44:00 [只看该作者]

msgbox(ex.message)
出现这样的报错提示

Object reference not set to an instance of an object.
对象引用未设置为对象的实例。

其他地方也经常有类似这样的报错
[此贴子已经被作者于2024/7/5 16:45:22编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107896 积分:548849 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/7/5 16:59:00 [只看该作者]

不可能啊,除非ftp是空的、

再调试看看

 Try 
msgbox(ftp is nothing)
                        If ftp.FileExists(NetFile) = False Then '如果存在则下载
                            丢失 = 丢失 + 1
                            Continue For ' 下一个循环
                        End If
msgbox("NetFile=" & NetFile)
                    Catch ex As Exception 
msgbox(ex.message)

 回到顶部
帅哥,在线噢!
9EQ98
  7楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:511 积分:4674 威望:0 精华:0 注册:2014/1/16 16:55:00
  发帖心情 Post By:2024/7/5 23:18:00 [只看该作者]

Try
                        If FTP.Connect = True Then ' FTP连接失败时
                            If ftp.FileExists(NetFile) = False Then '如果存在则下载
                                丢失 = 丢失 + 1
                                Continue For ' 下一个循环
                            End If
                        End If
                    Catch ex As Exception
                        Dim IsFTP As Boolean = ftp Is Nothing 
                        FileSys.WriteAllText(ProjectPath & "Ftp_Files_Down_Err.Txt", "FTP Is Nothing =" & IsFTP & vbCrLf, True)
                        FileSys.WriteAllText(ProjectPath & "Ftp_Files_Down_Err.Txt", "检查文件存在NetFile =" & NetFile & vbCrLf, True)
                        FileSys.WriteAllText(ProjectPath & "Ftp_Files_Down_Err.Txt", ex.message & vbCrLf, True)
                        If Forms("登录日志").Opened = True AndAlso Forms("登录日志").Controls.Contains("DT_List") = True Then
                            Dim MESS As WinForm.ListBox = Forms("登录日志").Controls("DT_List")
                            Dim txt As String = DT.Name & "  " & DC.Name
                            If MESS.ComboList.Contains(txt) = False Then 
                                MESS.ComboList = MESS.ComboList & "|" & txt
                            End if 
                            MESS.ComboList = MESS.ComboList & "|检查异常:" & NetFile
                            'msgbox(ex.message)
                        End If


以下结果:




NetFile=/ST/YPJH/OX-2024-05-020/1.png
FTP Is Nothing: False  /ST/YPJH/OX-2024-05-020/1.png
FTP Is Nothing =False
检查文件存在NetFile =/ST/YPJH/ST-2024-02-002/1/File/ST02037XN样品计划.xls
Object reference not set to an instance of an object.
FTP Is Nothing =False
检查文件存在NetFile =/ST/Morning/3566蓝色横线丝网.png
Object reference not set to an instance of an object.
FTP Is Nothing =False
检查文件存在NetFile =/ST/YPJH/ST-2024-06-026/4.png
Object reference not set to an instance of an object.
FTP Is Nothing =False
检查文件存在NetFile =/ST/YPJH/ST-2024-06-039/65.png
Object reference not set to an instance of an object.
FTP Is Nothing =False
检查文件存在NetFile =/ST/354.png
Object reference not set to an instance of an object.
[此贴子已经被作者于2024/7/5 23:19:39编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107896 积分:548849 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/7/6 8:57:00 [只看该作者]

这样调试看看输出什么错误结果

Try
                        If FTP.Connect = True Then ' FTP连接失败时
                            If ftp.FileExists(NetFile) = False Then '如果存在则下载
                                丢失 = 丢失 + 1
                                Continue For ' 下一个循环
                            End If
                        End If
                    Catch ex As Exception
                        Dim IsFTP As Boolean = ftp Is Nothing 
                        FileSys.WriteAllText(ProjectPath & "Ftp_Files_Down_Err.Txt", "FTP Is Nothing =" & IsFTP & vbCrLf, True)
                        FileSys.WriteAllText(ProjectPath & "Ftp_Files_Down_Err.Txt", "检查文件存在NetFile =" & NetFile & vbCrLf, True)
Dim bu As new StringBuilder
bu.AppendLine("Exception 错误记录 ++++++++")
Dim v  = ex 
    Do While v IsNot Nothing
        bu.AppendLine( v.Message &  vbcrlf & v.StackTrace)
        v = v.InnerException
    Loop
bu.AppendLine("Exception 错误记录 ----------")
                        FileSys.WriteAllText(ProjectPath & "Ftp_Files_Down_Err.Txt", bu.ToString & vbCrLf, True)
……


 回到顶部