【C#】winform实现锁定和解锁文件夹功能

671 阅读2分钟

我正在参加「掘金·启航计划」

有个朋友找我,问我有没有一个简单的小工具,能够直接对文件夹进行加密或者加锁,带着这个朋友的需求就简单的实现了加解锁文件夹功能的小工具!大家也可以想一想,在什么场景下需要对文件夹进行加锁操作呢?
1)一些比较敏感工作文件
2)防止别人复制个人的学习成果文件
等等场景

1、开发环境信息

1)操作系统:windows11 专业版
2)开发工具:Microsoft Visual Studio Professional 2017
3)开发框架:.NET Framework 4.6.1

2、界面设计

image.png 1)目标文件夹文本框
输入加解锁目标路径值
2)选择按钮
点击按钮能够选择目标路径,确定后,并且能够赋值到文本框里,此处和文件夹选择组件结合使用
3)加锁按钮
点击按钮,对目标文件夹进行加锁操作
4)解锁按钮
点击按钮,对目标文件夹进行解锁操作

3、浏览文件夹对话框组件

直接双击或者拖入到目标Form窗体即可,这个组件需要配合对应的按钮使用,由按钮或者其他控件的点击事件,间接触发文件夹浏览选择对话框 image.png

  • 具体代码如下
private void btnSelectFolder_Click(object sender, EventArgs e)
{
    folderBrowserDialog.Description = "请选择文件夹";
    folderBrowserDialog.RootFolder = Environment.SpecialFolder.MyComputer;
    folderBrowserDialog.ShowNewFolderButton = true;
    if (txtTargetFolder.Text.Length > 0) folderBrowserDialog.SelectedPath = txtTargetFolder.Text;
    if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
    {
        txtTargetFolder.Text = folderBrowserDialog.SelectedPath;
    }
}
  • 选择文件夹效果 image.png

4、加锁按钮

点击加锁按钮,对目标文件夹进行加锁操作

编号关键类备注
1DirectorySecurity目录安全类
2FileSystemAccessRule系统文件访问规则类
3Environment.UserName当前系统的登录用户
  • 加锁前,文件夹打开浏览到的文件界面
    image.png

  • 加锁后,显示的效果
    image.png

  • 代码如下

private void btnAddLock_Click(object sender, EventArgs e)
{
    try
    {
        string folderPath = txtTargetFolder.Text;

        if (string.IsNullOrWhiteSpace(folderPath))
        {
            MessageBox.Show("请输入或者选择目标文件夹!");
            return;
        }

        DirectorySecurity directorySecurity = Directory.GetAccessControl(folderPath);
        FileSystemAccessRule fileSystemAccessRule = new FileSystemAccessRule(Environment.UserName, FileSystemRights.FullControl, AccessControlType.Deny);
        directorySecurity.AddAccessRule(fileSystemAccessRule);
        Directory.SetAccessControl(folderPath, directorySecurity);

        MessageBox.Show($"加锁成功!");
    }
    catch (Exception ex)
    {
        MessageBox.Show($"加锁失败:{ex.Message}");
    }
}

5、解锁按钮

点击解锁按钮,对目标文件夹进行解锁操作

  • 代码如下
private void btnUnLock_Click(object sender, EventArgs e)
{
    try
    {
        string folderPath = txtTargetFolder.Text;

        if (string.IsNullOrWhiteSpace(folderPath))
        {
            MessageBox.Show("请输入或者选择目标文件夹!");
            return;
        }

        DirectorySecurity directorySecurity = Directory.GetAccessControl(folderPath);
        FileSystemAccessRule fileSystemAccessRule = new FileSystemAccessRule(Environment.UserName, FileSystemRights.FullControl, AccessControlType.Deny);
        directorySecurity.RemoveAccessRule(fileSystemAccessRule);
        Directory.SetAccessControl(folderPath, directorySecurity);

        MessageBox.Show($"解锁成功!");
    }
    catch (Exception ex)
    {
        MessageBox.Show($"解锁失败:{ex.Message}");
    }
}

6、常见设置

1)设置窗体居中显示
确定窗体第一次出现的位置,Form组件属性StartPosition=CenterScreen

到此,加解锁文件夹的小工具就完成了 感兴趣的小伙伴们,加锁了的文件夹,在PE系统下是否能够打开呢!可以尝试下