2012-01-12 63 views
7

在.NET中,是否有一種簡單的方法來檢查當前用戶是否有權在目錄中創建文件?相當於C++ _access函數的東西,將是理想的。在.NET中,檢查當前用戶是否可以寫入目錄

我不想使用試驗和錯誤(創建一個虛擬文件,然後刪除它):除了看起來hackish,其他軟件正在監視有問題的目錄下的文件。

我不想使用System.DirectoryServices:查看ACL的,解決組成員身份以及來自不同組成員身份的權限如何交互似乎容易出錯並且太難。在某個地方必須有一個耶或諾的功能,不是嗎?

在此先感謝!

作爲獎勵,如果它也適用於網絡共享,那很酷。

+1

http://stackoverflow.com/a/265958/284240因此處理例外。 – 2012-01-12 20:47:48

+0

[如何檢查是否可以在c#中的特定文件夾中創建文件?]的可能重複(http://stackoverflow.com/questions/316903/how-to-check-if-i-can-create-a -file-in-a-specific-folder-in-c) – Joe 2012-01-12 20:48:07

+0

檢查此答案,將其轉換爲VB.NET應該是微不足道的;-) http://stackoverflow.com/a/130641/559144 – 2012-01-12 20:49:10

回答

5
FileIOPermission writePermission = new FileIOPermission(FileIOPermissionAccess.Write, filename); 
if (SecurityManager.IsGranted(writePermission)){ 
    //write here 
} else { 
    //some error message 
} 
+0

假設它有效(我希望),其中一個答案,讓我upvote,upvote這個問題,並最喜歡它:) – 2012-01-12 20:55:48

+0

看起來不錯!讓我試試看。 – 2012-01-12 20:59:26

+1

它似乎並不適合我。出於某種原因,它總是返回true。這肯定是我做錯了,但它很直截了當,我不明白它會是什麼。 /感嘆......我已將它標記爲已接受,因爲它指向了正確的API。我只需要解決它,我猜 – 2012-01-12 21:58:29

0

下會返回一個DirecotrySecurity實例http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.directorysecurity.aspx

DirectoryInfo(pathstr).GetAccessControl() 
+1

這是否適用於當前用戶?我看着這個,它似乎給予訪問ACL。可能會說「Foo Managers」用戶組具有寫入權限,「Bar Workers」被拒絕,但無法解決當前用戶是否屬於這些組中的成員之一的組的成員。也許我想念如何解決這個問題 – 2012-01-12 20:58:57

5

提前檢查權限是一個冒險的項目。更不用說複雜,遍歷整個ACL列表並計算有效的權限集。

進一步......沒有保證。僅僅因爲您提前主動檢查權限並不意味着在您嘗試創建文件時權限不會發生變化。

「正確」的方法是使一security demand,以聲明與FileIOPermissionAttribute或強制性地,通過創建的FileIOPermission適當實例,並調用其Demand()方法。如果您擁有所需的權限,則對Demand()的呼叫成功;否則會拋出一個SecurityException,您需要採取行動並採取行動。

根據我的經驗,強制性檢查更容易。

還應該注意的是,在Windows 7中,儘管您可能在概念上具有對該目錄的寫入權限,但它仍可能無法工作,除非您使用提升的權限運行。

+0

我完全同意。我不想檢查權限來防範可能失敗的操作。我們有一個遺留系統,其中包含許多運行在許多服務器上的軟件,並受到admin/config問題的影響。我需要編寫一個應用程序來查找配置錯誤,但必須被動地進行,而不會孤立測試/虛擬文件等。 – 2012-01-12 22:04:00

相關問題