2010-02-25 36 views

回答

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

+0

我試過如下: 昏暗readPermission作爲新的FileIOPermission(FileIOPermissionAccess.Read, 「C:\用戶\管理\ Documents \我的圖片」) 上述目錄的訪問嘗試產生 「拒絕訪問」,但「安全管理器.IsGranted(readPermission)「總是返回true。 – SharpAffair 2010-02-25 19:05:57

+0

來自http://msdn.microsoft.com/en-us/library/system.security.securitymanager.isgranted.aspx:'授予權限是由策略決定的,並且不同於受到覆蓋的需求,例如斷言。另外,IsGranted只測試調用代碼組合的授予,而不依賴堆棧上的其他調用者。' – Oded 2010-02-25 19:24:21

+6

這不是正確的答案。 FileIOPermission處理CAS,而不是文件系統。換句話說,.NET安全策略是否允許訪問。您可以擁有CAS訪問權限,但Windows仍然可以拒絕它。 DirectoryInfo.GetAccessControl()是必需的。 – 2010-02-25 19:46:45

-1

,你可以只是做一個簡單的小布爾函數有一個目錄信息變量試試從給定路徑獲取目錄。如果沒有問題,則返回true,如果異常是句柄,則返回false,或者將異常子句分解爲子異常並獲取錯誤代碼。

相關問題