2013-03-29 69 views
4

我正在列出Nas share中的一些文件夾,獲取文件夾屬性和列表子文件夾。 爲在那裏我沒有訪問權限的文件夾,我得到兩個不同的異常UnauthorizedAccessException vs IOException

  1. System.UnauthorizedAccessException:訪問路徑「Z:\信息」被拒絕。
  2. System.IO.IOException:未找到網絡路徑。

第二個需要很長時間才能趕上這將會減慢應用

我的問題是,爲什麼一些股票我得到的網絡路徑沒有被發現和其他人的訪問被拒絕? 有什麼不同?以及如何避免需要時間的第二個異常。

回答

3

我的問題是爲什麼一些股票我沒有找到網絡路徑,其他人的訪問被拒絕?有什麼不同?

如果找到的路徑很快,但您沒有權限,您將很快收到UnauthorizedAccessException

但是,如果系統試圖發現網絡共享是否有效,則可能需要一段時間。在確定網絡路徑完全無效之前,它需要做相當多的網絡訪問,這可能需要一段時間。

以及如何避免需要時間的第二個異常。

這樣做的唯一方法是不訪問不存在的共享。這並不總是實用 - 如果您需要在運行時確定它們是否存在,那麼您只需要設計一個事實,即這可能會很慢。

但是有很多方法可以改善這種情況 - 如果您正在檢查多個共享,您可以並行執行這些檢查。考慮到這實際上是IO的限制,線程可能會對應用程序的整體響應性產生巨大影響,因爲您可以同時檢查所有的共享,而不是按順序檢查。

+0

股份應該存在,因爲我做Directory.GetDirectories(根)然後我循環通過結果,如果共享不存在,那麼它不應該列出。 – Maro

+0

@Maro「永久」映射驅動器可能仍「存在」但不可用。在您嘗試訪問驅動器之前,操作系統實際上並沒有連接到它們,這可能需要一段時間。 –

+0

@Maro這是一個加速啓動時間等事情的優化。 –

相關問題