2011-11-30 87 views
3

我有一個經常刪除並重新創建的文件(我無法控制此行爲)。但是,在重新創建文件時,它不保留它在刪除之前的權限。所以我寫了這段代碼試圖解決這個問題:在.NET中保留文件權限

var access = File.GetAccessControl(filepath, AccessControlSections.Access); 
deleteAndRecreate(filepath); 
File.SetAccessControl(filepath, access); 

但是這不起作用。如果我明確給出文件的「TestUser」讀取權限,那麼在運行此代碼後,TestUser將不再具有讀取權限。我究竟做錯了什麼?

+0

莫非除了刪除文件之外,你還可以做其他的事情,比如清空它。文件不存在是由於空文件無法完成的? – BlueMonkMN

+0

您是否嘗試過使用您的預設權限在目錄下創建您的文件? –

+0

@BlueMonkMN我會完全做到這一點,但正如我所說,我無法控制行爲。這是第三方庫問題。 – Phil

回答

-1
//Get current attributes 
var fileAttributes = File.GetAttributes(filePath); 

刪除文件,重新創建它,然後使用恢復原來的權限:

//Restore the file's original attributes 
File.SetAttributes(filePath, fileAttributes); 
+2

文件屬性不包含訪問控制權限。 – phoog

+0

我檢查並重新檢查,這似乎也不工作。 – Phil

+0

啊,好的,你說得對。這段代碼將簡單地維護'ReadOnly'和類似的屬性。不是用戶特定的訪問權限。 –

0

嘗試沒有第二個參數

var access = File.GetAccessControl(filepath); 
deleteAndRecreate(filepath); 
File.SetAccessControl(filepath, access); 
+0

對不起,這也沒有工作。 – Phil

+0

這沒有例外嗎? – ScottTx

+0

沒有發生任何異常。 – Phil

0

我的猜測是,該FileSecurity對象返回通過GetAccessControl不再有效,一旦該文件被刪除。

你有沒有嘗試過這樣的事情,而不是(未經測試)?

deleteAndRecreate(filepath); 
FileSecurity access = File.GetAccessControl(filepath, AccessControlSections.Access); 
access.AddAccessRule(new FileSystemAccessRule(account, rights, controlType)); 

(如果這個一般方法的工作原理,你也許能夠獲得訪問規則出與您之前創建access對象和重用這些,他們很可能通過刪除仍然有效。)