2016-03-26 29 views
2

URLを渡した後にリモートファイルが存在するかどうかを確認する機能があります。それが存在しないと仮定すると、関数は0を返し、別のサブで使用されます。ここでは、私が持っているものです。VB.net - リモートファイルが存在するかどうかを確認する

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 

私はアプリを実行して、意図的にVisual StudioがSystem.Net.WebExceptionが未処理だった私を与える存在しないURLを指定した場合。メッセージ=リモートサーバーからエラーが返されました:(550)ファイルが使用できません(ファイルが見つかりません、アクセス不可など)。

"if response.StatusCode ..."がプログラムをシャットダウンするのではなく、それを処理すると仮定しました。

助けてください。

DWM

+0

'Try' /' Catch'ブロック内のすべてをラップする方法と、例外がスローされたときにfalseを返す方法はありますか? –

+0

ところで、** 1)**なぜあなたは 'Boolean'の代わりに' Integer'を戻り値の型として使用していますか? ** 2)** 'RemoteFileExists = ...'と 'Exit Function'(' Return'を呼び出すことも関数を終了します)の代わりに 'Return 0'または' Return 1'を呼び出します。 –

+0

これは私が把握できるものなので、整数を使用していました。私はtry/catchを試みましたが、それを正しく取得できませんでした。私はVBにはかなり新しいです。例を挙げたいと思ったら、私は深く感謝しています。 –

答えて

1

あなただけとにかく1または0を返すので、あなたはBooleanIntegerから切り替える必要がまず第一。 BooleanはTrueまたはFalseのいずれかになります。

第2に、発生する可能性のあるエラーを処理するには、Try/Catchブロックのすべてをラップする必要があります。 Try/Catchのコードをラップすると、ほとんどのエラー(最も極端なエラーを除く)を捕らえることができ、エラーを投げる可能性があるコードの周りに置くと、より単純なエラーのためにアプリケーションがクラッシュすることがなくなります。

RemoteFileExists = <value>の代わりにReturn <value>を使用する必要があります。Returnは必要な値を返して機能を終了するためです。

実装例:Catchブロック内

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 

ex.Messageはエラーメッセージであり、コードにエラーが発生した場所ex.StackTraceです。

+0

ありがとうございます。私はコードの例を見てVBを学んでいます。これは役に立ちます。あなたが実際に私の質問に答えてくれたことは、私がフォーラムで頻繁に見つけた謙虚さのどれもがなくても役に立ちました。神のご加護を。 DWM –

+0

@DavidMize:うまく働いて満足しました!左の緑色のチェックマークを押して、私の郵便物を受け入れられた回答としてマークすると嬉しいです。これは回答者(私)に15の評判ポイントを与えて報酬を与えます。ポイント。 –

関連する問題