我想用C#永久鎖定我的文件夾。如何在C中鎖定文件夾#
只有在請求時,該鎖才能被應用程序訪問。當應用程序關閉時,該鎖應該無法訪問。另外,當應用程序正在運行時,該文件夾無法在應用程序外移動或打開。意思是,只有通過我的應用程序該文件夾應該被訪問。
我想用C#永久鎖定我的文件夾。如何在C中鎖定文件夾#
只有在請求時,該鎖才能被應用程序訪問。當應用程序關閉時,該鎖應該無法訪問。另外,當應用程序正在運行時,該文件夾無法在應用程序外移動或打開。意思是,只有通過我的應用程序該文件夾應該被訪問。
您可以加密文件並在應用程序打開時鎖定它們,但不能阻止其他人刪除文件或恢復到以前版本的文件。您可以嘗試保留哪些文件簽名是最新的記錄,但他們也可以恢復。
你應該指定你的用例。
簡而言之,C#本身並不會讓你得到你想要的。程序只能在運行時鎖定資源。
您可以做的是設置一個用戶,該用戶是該文件夾的所有者,並且是唯一可以讀取/寫入該文件夾的用戶。這可以通過Active Directory或普通的Windows用戶帳戶完成。請記住,您通常也會讓管理員也如此,所以如果出現問題,您可以修復它,而不必成爲這個新用戶(可能沒有其他所需的權限來解決問題)。然後,讓你的程序以該用戶的身份驗證自己(可能是通過模擬),它將能夠使用該文件夾,但其他人不會。
此文件包含什麼?如果您希望存儲敏感數據或不應更改的數據,我會將其放入數據庫中。我出於幾個原因說這個;首先,以不同的用戶身份連接到數據庫要比用於模擬不同於運行該程序的Windows用戶的Windows用戶的程序容易得多。對文件夾權限進行編程管理還需要爲您的程序提供管理權限。數據庫還允許非常精細的數據訪問(直到列級別)。最後,你不太可能最終得到一個錯誤和現場投訴,說你的程序已經在用戶的計算機上創建了一個無法訪問的,空間耗盡的文件夾,即使在卸載程序後它們也無法刪除。
以下代碼將有助於鎖定和解鎖文件夾。
來源: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);
}
}
不錯@Golda .... + 1 – Ansari 2015-09-23 13:57:41
你的意思是 「鎖定」?誰應該被鎖定?文件夾上的哪些操作應該「鎖定」? – 2010-11-16 19:27:02
你確定要使用文件系統嗎?也許本地數據庫會是更好的選擇? – 2010-11-16 19:32:07