我想用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