2010-11-16 104 views
2

我想用C#永久鎖定我的文件夾。如何在C中鎖定文件夾#

只有在請求時,該鎖才能被應用程序訪問。當應用程序關閉時,該鎖應該無法訪問。另外,當應用程序正在運行時,該文件夾無法在應用程序外移動或打開。意思是,只有通過我的應用程序該文件夾應該被訪問。

+3

你的意思是 「鎖定」?誰應該被鎖定?文件夾上的哪些操作應該「鎖定」? – 2010-11-16 19:27:02

+2

你確定要使用文件系統嗎?也許本地數據庫會是更好的選擇? – 2010-11-16 19:32:07

回答

0

您可以加密文件並在應用程序打開時鎖定它們,但不能阻止其他人刪除文件或恢復到以前版本的文件。您可以嘗試保留哪些文件簽名是最新的記錄,但他們也可以恢復。

你應該指定你的用例。

1

簡而言之,C#本身並不會讓你得到你想要的。程序只能在運行時鎖定資源。

您可以做的是設置一個用戶,該用戶是該文件夾的所有者,並且是唯一可以讀取/寫入該文件夾的用戶。這可以通過Active Directory或普通的Windows用戶帳戶完成。請記住,您通常也會讓管理員也如此,所以如果出現問題,您可以修復它,而不必成爲這個新用戶(可能沒有其他所需的權限來解決問題)。然後,讓你的程序以該用戶的身份驗證自己(可能是通過模擬),它將能夠使用該文件夾,但其他人不會。

此文件包含什麼?如果您希望存儲敏感數據或不應更改的數據,我會將其放入數據庫中。我出於幾個原因說這個;首先,以不同的用戶身份連接到數據庫要比用於模擬不同於運行該程序的Windows用戶的Windows用戶的程序容易得多。對文件夾權限進行編程管理還需要爲您的程序提供管理權限。數據庫還允許非常精細的數據訪問(直到列級別)。最後,你不太可能最終得到一個錯誤和現場投訴,說你的程序已經在用戶的計算機上創建了一個無法訪問的,空間耗盡的文件夾,即使在卸載程序後它們也無法刪除。

2

以下代碼將有助於鎖定和解鎖文件夾。

來源:http://bitsbyta.blogspot.de/2011/01/lock-and-unlock-folder-cnet.html

using System.IO; 
using System.Security.AccessControl; 

private void btnBrowse_Click(object sender, EventArgs e) 
{ 

    if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) 
    { 
     // Select the folder to lock 
     textBox1.Text = folderBrowserDialog1.SelectedPath; 
    } 

} 

private void btnLock_Click(object sender, EventArgs e) 
{ 
    try 
    { 

     string folderPath = textBox1.Text; 
     string adminUserName = Environment.UserName;// getting your adminUserName 
     DirectorySecurity ds = Directory.GetAccessControl(folderPath); 
     FileSystemAccessRule fsa = new FileSystemAccessRule(adminUserName, FileSystemRights.FullControl, AccessControlType.Deny)  
     ds.AddAccessRule(fsa); 
     Directory.SetAccessControl(folderPath, ds); 
     MessageBox.Show("Locked"); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    }  
} 

private void btnUnLock_Click(object sender, EventArgs e) 
{ 
    try 
     { 
    string folderPath = textBox1.Text; 
    string adminUserName = Environment.UserName;// getting your adminUserName 
    DirectorySecurity ds = Directory.GetAccessControl(folderPath); 
    FileSystemAccessRule fsa = new FileSystemAccessRule(adminUserName,FileSystemRights.FullControl, AccessControlType.Deny)  
    ds.RemoveAccessRule(fsa); 
    Directory.SetAccessControl(folderPath, ds); 
    MessageBox.Show("UnLocked"); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 
+0

不錯@Golda .... + 1 – Ansari 2015-09-23 13:57:41