我需要通過計算機上的各種目錄(通過DirectoryInfo)。其中一些不可訪問,併發生UnauthorizedAccessException。我如何檢查目錄訪問而不捕獲異常?.NET - 檢查目錄是否可以正常訪問
10
A
回答
8
您需要使用Security
命名空間。
請參閱this SO回答。
從答案:
FileIOPermission writePermission = new FileIOPermission(FileIOPermissionAccess.Write, filename);
if(!SecurityManager.IsGranted(writePermission))
{
//No permission.
//Either throw an exception so this can be handled by a calling function
//or inform the user that they do not have permission to write to the folder and return.
}
更新:(以下評論)
FileIOPermission
涉及安全政策不是文件系統權限,所以你需要使用DirectoryInfo.GetAccessControl
。
9
簡單的說你不行。沒有辦法檢查一個目錄是否可訪問,你可以確定它是否可訪問。之所以一旦檢查完成,權限可能會發生變化並使檢查無效。您可以實施的最可靠的策略是訪問目錄並獲取UnauthorizedAccessException
。
我寫了一篇關於這一主題的博客文章近日其進入詳細一點的位置
-1
,你可以只是做一個簡單的小布爾函數有一個目錄信息變量試試從給定路徑獲取目錄。如果沒有問題,則返回true,如果異常是句柄,則返回false,或者將異常子句分解爲子異常並獲取錯誤代碼。
相關問題
- 1. 檢查一個目錄是否存在並且可訪問
- 2. 檢查目錄是否可讀
- 3. 如何檢查ReflectionProperty是否可訪問?
- 4. 檢查API是否可訪問
- 5. 在.NET中,檢查當前用戶是否可以寫入目錄
- 6. 最好的方法來檢查服務器是否可以在.NET中訪問?
- 7. 如何檢查應用程序是否有權訪問目錄?
- 8. 不能從查看目錄,而HTML和(正常)ASPX都可以訪問
- 9. 檢查是否可以分配問題
- 10. 碼頭圖像是否可以訪問tmp目錄?
- 11. 是否可以通過鏈接訪問'gh-pages'的子目錄?
- 12. 檢查是否每個人都可以讀取/寫入目錄
- 13. 如何檢查是否可以將文件寫入目錄?
- 14. 如何檢查目錄是否可以被UID寫入?
- 15. 如何檢查目錄是否可以在PHP中寫入?
- 16. 檢查數據庫是否存在,當前的登錄可以訪問
- 17. 檢查Android手機是否可以訪問互聯網
- 18. 如何檢查是否可以訪問zip文件?
- 19. 如何檢查服務器是否可以訪問並運行?
- 20. 如何檢查我是否可以訪問window.opener?
- 21. 檢查服務器是否可以通過IPv6訪問?
- 22. 檢查用戶是否可以訪問跨域外部資源
- 23. 如何檢查Android設備是否可以訪問互聯網?
- 24. 如何檢查xml文件是否可以在c#中訪問?
- 25. 檢查是否可以使用Golang訪問URL
- 26. ipoib:檢查是否可以訪問給定iboip的infiniband節點
- 27. SiteMinder是否可以檢查Cookie並允許/拒絕訪問
- 28. 檢查是否可以通過JavaScript訪問遠程網站
- 29. 檢查用戶機器是否可以訪問Facebook
- 30. 檢查網絡IF是否可以在C Linux中訪問Internet?
我試過如下: 昏暗readPermission作爲新的FileIOPermission(FileIOPermissionAccess.Read, 「C:\用戶\管理\ Documents \我的圖片」) 上述目錄的訪問嘗試產生 「拒絕訪問」,但「安全管理器.IsGranted(readPermission)「總是返回true。 – SharpAffair 2010-02-25 19:05:57
來自http://msdn.microsoft.com/en-us/library/system.security.securitymanager.isgranted.aspx:'授予權限是由策略決定的,並且不同於受到覆蓋的需求,例如斷言。另外,IsGranted只測試調用代碼組合的授予,而不依賴堆棧上的其他調用者。' – Oded 2010-02-25 19:24:21
這不是正確的答案。 FileIOPermission處理CAS,而不是文件系統。換句話說,.NET安全策略是否允許訪問。您可以擁有CAS訪問權限,但Windows仍然可以拒絕它。 DirectoryInfo.GetAccessControl()是必需的。 – 2010-02-25 19:46:45