2012-11-02 31 views
0

下面是如何使用ftp上傳文件的代碼。我的問題是如果在try中有一個異常會發生什麼,ftp連接會自動關閉在catch中?使用「使用」更好嗎?ftp連接和上傳如果有異常,連接會發生什麼

謝謝

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 

回答

1

不,不會,如果以前ftp.Close()已完成執行時發生異常關閉。即使發生異常,您也應該使用Finally塊來確保ftp始終處於關閉狀態。這意味着你應該定義ftp在更高的作用域級別比在try塊內,以便它可以在finally塊中訪問。你可以在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 
+0

謝謝, - 如果它在沒有關閉的情況下寫入using語句會發生什麼 - 當發生異常時它會自動關閉?你能幫我寫嗎? –

+0

'使用'編譯爲try/catch/finally,所以'Dispose'將總是被調用 - 您需要確保'Close'方法是作爲'Dispose'執行計劃的一部分調用的通常是可以「打開」的東西)。 –

1

當發生異常(無論它是什麼)時,控制流會跳過所有內容,直到它到達Catch指令。

所以在這種情況下,如果您在UploadFile中有異常,您將不會關閉連接。

如果FTPConnection類是IDisposable,那麼您最好的選擇是使用using關鍵字。否則,請在Catch之後使用最後的狀態,格蘭特說。

+0

在我對我的回答的評論中觸動了一下:你需要確定'Dispose'被稱爲'Close',這是我知道的一種標準,但是如果不是這樣的話,可能是一種監督。 –

相關問題