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在比 try 块中更高的范围级别进行定义,以便在 finally 块中可以访问它。从技术上讲,您可以Close从 catch 块中调用,但 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 关键字。否则,如格兰特所说,使用 Catch 之后的 finally 语句。

于 2012-11-02T16:20:47.913 回答