2010-11-16 105 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