因此它被認爲只捕捉你無法預測或例外的異常。捕捉filenotfound異常
因此,例如,IOExceptions而不是FileNotFoundException(因爲這種情況下可以用簡單的文件處理,避免使用異常作爲流量控制)。
這是我對這個話題的理解,糾正我,如果我錯了。
但是,這引發了問題....爲什麼像FileNotFoundException這樣的異常可用?
感謝
因此它被認爲只捕捉你無法預測或例外的異常。捕捉filenotfound異常
因此,例如,IOExceptions而不是FileNotFoundException(因爲這種情況下可以用簡單的文件處理,避免使用異常作爲流量控制)。
這是我對這個話題的理解,糾正我,如果我錯了。
但是,這引發了問題....爲什麼像FileNotFoundException這樣的異常可用?
感謝
您應該捕獲您可以處理的異常。你的第一句話有點偏離,可能是導致你困惑的原因。
「所以它被認爲只捕捉你無法預測或例外的例外。」
這應該閱讀
「所以它是唯一拋出例外,你不能預測或有特殊情況說。」
因此,如果你可以處理FileNotFoundException,那麼你應該抓住它。有許多異常會擴展IOException,當然,你不能(不想?)處理所有這些異常。
什麼情況會阻止我處理FileNotFoundException?我想我可以通過使用文件存在檢查和try-catch塊來處理FileNotFoundException,對嗎? – dotnetdev 2011-06-07 21:05:55
@dotnetdev - 這句話只是說明你只能捕獲你的程序能夠處理的異常,以便它可以優雅地失敗。所以,如果你有一個易失文件(也許它是一個緩存),你可能會捕獲FileNotFoundExceptions,因爲你只是從數據庫加載並重新創建文件。檢查文件是否存在的問題是它是共享資源。它可以被刪除。在我的例子中,如果你需要文件在那裏,或者你沒有什麼可以做的,你可以捕獲它,以避免發送給用戶的惡意郵件。 – 2011-06-07 22:28:55
我讓你瞭解共享資源的東西。執行if/else檢查時出現的問題是該文件可能在此之後和使用之前被刪除。鑑於你的例子,我假設重載/重新創建操作發生在catch塊中?如果沒有什麼可以做,以某種方式收回,那麼就不要抓住它看起來。我沒有想到的是,某些文件可能無法再次加載(例如暫時的),並且所有文件及其環境!=相同。 – dotnetdev 2011-06-07 22:39:02
考慮該文件大幹快上,當你檢查它並執行,可能會導致異常的操作之間的文件系統刪除的情況。這似乎不大可能,但這種事情會發生。
您必須區分最佳實踐和絕對要求。在嘗試訪問文件之前先檢查文件是一種最佳做法。但是,這不能真正執行。由於文件在被訪問前存在絕對要求,框架會拋出異常來強制執行此條件。
在一個理想世界中,不會有什麼異常,因爲就沒有錯誤和所有的程序和網絡(和用戶!)是絕對完美的。
不好的例子,檢查一個文件是否存在不是併發安全的。 – 2011-06-06 23:07:21