2013-06-27 61 views
0

我創建一個文件是這樣的:創建文件和無法用戶刪除C#

System.IO.File.Create("file.dat").Close(); 

我想設置文件的權限從刪除它不允許用戶。我嘗試以下,但它沒有工作:http://msdn.microsoft.com/en-us/library/system.io.file.setaccesscontrol.aspx

否認:

System.Security.AccessControl.FileSecurity fSecurity = File.GetAccessControl(dirPath + "\\" + fileName); 

fSecurity.AddAccessRule(new System.Security.AccessControl.FileSystemAccessRule("Administrators", 
    System.Security.AccessControl.FileSystemRights.Delete, System.Security.AccessControl.AccessControlType.Allow)); 

File.SetAccessControl(dirPath + "\\" + fileName, fSecurity); 
+0

哪個操作系統?我只能假設你指的是Windows,因爲它是C#。在任何情況下,保持文件在程序中打開都會阻止它被刪除。用戶總是會找到一種方法來刪除它,如果他想讓你也可以隱藏文件。這能解決你的問題嗎? – CodeCamper

+0

哪個用戶?所有? – jerry

+0

是的,我正在使用Windows。即使在應用程序關閉後,我也想阻止選擇。把它隱藏起來可能是一個解決方案,但我更願意保持它可見。我還考慮讓用戶只需使用管理員權限即可將其刪除。 – mmarques

回答

1

文件權限可以使用System.IO.File.SetAccessControl

查看文檔和例子在MSDN上設置刪除所有用戶的權限,但管理員可以使用此代碼

FileSecurity fSecurity = File.GetAccessControl(fileName); 

    AuthorizationRuleCollection rules = fSecurity.GetAccessRules(true, true, typeof(System.Security.Principal.SecurityIdentifier)); 
    foreach (AuthorizationRule rule in rules) 
    { 
     System.Security.Principal.NTAccount account = 
      (System.Security.Principal.NTAccount)rule.IdentityReference.Translate(typeof(System.Security.Principal.NTAccount)); 
     if (account.Value != "BUILTIN\\Administrators") 
     { 
      fSecurity.AddAccessRule(new FileSystemAccessRule(account.Value, FileSystemRights.Delete, AccessControlType.Deny)); 
     } 
    } 

    File.SetAccessControl(fileName, fSecurity); 
+0

在那個例子中,我怎麼能指定只有管理員previlegies的用戶可以做的東西? – mmarques

+0

我在回答中添加了代碼 –

+0

感謝您的幫助,但不幸的是它沒有奏效。創建文件後,我可以繼續刪除它。但創建它隱藏也解決了我的問題。 – mmarques