VB.net - 查看是否存在远程文件

时间:2016-03-26 19:03:48

标签: vb.net ftpwebrequest

我有一个函数来检查传递URL后是否存在远程文件。假设它不存在,该函数将返回0以在另一个子中使用。这就是我所拥有的:

Public Function RemoteFileExists(ByVal fileurl As String) As Integer
    Dim request As FtpWebRequest = DirectCast(WebRequest.Create(fileurl), FtpWebRequest)
    request.Method = WebRequestMethods.Ftp.GetFileSize
    Dim response As FtpWebResponse = DirectCast(request.GetResponse(), FtpWebResponse)
    If response.StatusCode = FtpStatusCode.ActionNotTakenFileUnavailable Then
        RemoteFileExists = 0
        Exit Function
    End If
    Dim fileSize As Long = response.ContentLength
    MsgBox(fileSize)
    If fileSize > 0 Then
        RemoteFileExists = 1
    Else
        RemoteFileExists = 0
    End If
End Function

当我运行应用程序并故意提供不存在的URL时Visual Studio会给我System.Net.WebException未处理。消息=远程服务器返回错误:(550)文件不可用(例如,找不到文件,没有访问权限。)

我认为“if response.StatusCode ...”会处理而不是关闭程序。

任何帮助表示感谢。

DWM

1 个答案:

答案 0 :(得分:1)

首先,您应该从Integer切换到Boolean,因为您无论如何都只返回1或0。 Boolean可以是True或False。

其次,您应该将所有内容都包装在Try / Catch块中,以处理可能发生的任何错误。在Try / Catch中包装代码可以捕获大多数错误(除了最极端的错误)并将其置于可能引发错误的代码之外,可以避免您的应用程序因更简单的错误而崩溃。 / p>

最后,您应该使用Return <value>而不是RemoteFileExists = <value>,因为Return都会返回所需的值并退出该函数。

示例实施:

Public Function RemoteFileExists(ByVal fileurl As String) As Boolean
    Try
        Dim request As FtpWebRequest = DirectCast(WebRequest.Create(fileurl), FtpWebRequest)
        request.Method = WebRequestMethods.Ftp.GetFileSize
        Dim response As FtpWebResponse = DirectCast(request.GetResponse(), FtpWebResponse)
        If response.StatusCode = FtpStatusCode.ActionNotTakenFileUnavailable Then
            Return False 'Return instead of Exit Function
        End If
        Dim fileSize As Long = response.ContentLength
        MsgBox(fileSize)
        If fileSize > 0 Then
            Return True
        Else
            Return False
        End If
    Catch ex As Exception 'Catch all errors
        'Log the error if you'd like, you can find the error message and location in "ex.Message" and "ex.StackTrace".
        MessageBox.Show("An error occurred:" & Environment.NewLine & ex.Message & Environment.NewLine & ex.StackTrace, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Return False 'Return False since the checking failed.
    End Try
End Function

Catch块中,ex.Message是错误消息,ex.StackTrace是代码中发生错误的位置。