0

以下は、ftp を使用してファイルをアップロードする方法のコードです。私の質問は、try で例外が発生した場合はどうなるかということです。ftp 接続は catch で自動的に閉じられますか? 「使用」を使用する方が良いですか?

ありがとうございました

Try
  'connect to ftp server
  Dim ftp As New FTPConnection
  ftp.ServerAddress = "ftp.example.com"
  ftp.UserName = "example_user"
  ftp.Password = "example_pass"
  ftp.Connect()
  ftp.TransferType = FTPTransferType.BINARY

  'upload a file
  ftp.UploadFile("s:\test.txt", "test.txt")

  'close the connection
  ftp.Close()

Catch ex As Exception
  MessageBox.Show(ex.Message.ToString())
End Try
4

2 に答える 2

1

ftp.Close()いいえ、実行が完了する前に例外が発生した場合は閉じません。Finally例外が発生した場合でも、ブロックを使用してftp常に閉じていることを確認する必要があります。ftpこれは、finally ブロック内でアクセスできるように、try ブロック内よりも高いスコープ レベルで定義する必要があることを意味します。技術的には catch ブロック内から呼び出すこともできますCloseが、A) 両方またはすべての状況をカバーするわけではなく、B) catch 内のコードがさらに別の例外をスローした場合、とにかく機能しない可能性があります。

Dim ftp As New FTPConnection
Try

Catch ex As Exception
  MessageBox.Show(ex.Message.ToString())
Finally      
  ftp.Close()
End Try
于 2012-11-02T16:20:24.470 に答える
1

例外が発生すると (それが何であれ)、制御フローは Catch 命令に到達するまですべてをスキップします。

したがって、この場合、UploadFile に例外がある場合、接続は閉じられません。

FTPConnection クラスが IDisposable の場合、最適なオプションは using キーワードを使用することです。それ以外の場合は、Grant が言ったように、Catch の後に finally ステートメントを使用します。

于 2012-11-02T16:20:47.913 に答える