You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何设置权限禁止普通用户向指定文件夹复制粘贴文件

解决方案

问题根源

  • 你没有禁用目标文件夹的父级权限继承,C盘根目录给Users组的权限会自动继承到你创建的folder目录,额外的继承权限赋予了普通用户写入目录的能力。
  • 你当前给Users组的权限规则没有严格限制写入操作的权限。

代码修改方案

你需要在设置自定义权限前先禁用父级权限继承,清除所有继承来的权限,再手动添加你需要的权限规则,修改后的完整代码如下:

static void Main(string[] args)
{
    var path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);            
    var directory = Directory.CreateDirectory(Path.Combine(path, "folder"));
    using (StreamWriter sw = new StreamWriter(Path.Combine(directory.FullName, "example.txt")))
    {
        sw.WriteLine("hi");
    }
    var directorySecurity = directory.GetAccessControl();
    
    // 新增:禁用父级权限继承,删除所有已继承的权限规则
    directorySecurity.SetAccessRuleProtection(isProtected: true, preserveInheritance: false);
    
    var administratorRule = new FileSystemAccessRule("Administrators", FileSystemRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow);
    // 调整Users组权限为明确的只读类权限,避免多余权限
    var usersRole = new FileSystemAccessRule("Users", FileSystemRights.Read | FileSystemRights.ReadAndExecute | FileSystemRights.ListDirectory, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow);
    
    directorySecurity.AddAccessRule(administratorRule);
    directorySecurity.AddAccessRule(usersRole);
    directory.SetAccessControl(directorySecurity);            
}

关键修改说明

  • SetAccessRuleProtection 方法的第一个参数设为true表示开启访问规则保护,禁止父级(如C盘根目录)的权限继承到当前文件夹;第二个参数设为false表示直接删除所有已经从父级继承来的权限规则,仅保留你手动添加的权限。
  • 调整Users组的权限为明确的只读、列出目录、读取执行权限,完全剔除写入、创建文件/文件夹、修改属性等操作权限,普通用户自然无法向该目录复制粘贴文件。

注意事项

如果你是手动将生成的folder目录复制到C盘根目录,Windows文件复制操作可能会重置权限继承规则,建议直接通过代码在目标路径(C盘根目录)创建文件夹并设置权限,避免复制操作导致权限配置失效。

内容的提问来源于stack exchange,提问作者rlnnclt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 15:54:07