C#-文件安全性ACL访问

本文演示了如何使用C#编程语言来操作文件和目录的访问控制。通过实例展示了如何读取和修改文件及目录的ACL(访问控制列表),包括获取当前的访问规则、添加新的访问规则等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.AccessControl;
using System.Security.Principal;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string fileName = AppDomain.CurrentDomain.BaseDirectory + "test.txt";
            string dir = AppDomain.CurrentDomain.BaseDirectory;
            try
            {
                Console.WriteLine("File ACL");
                using (FileStream fs = new FileStream(fileName, FileMode.Open,FileAccess.Read))
                {
                    FileSecurity fsec = fs.GetAccessControl();
                    foreach(FileSystemAccessRule rule in fsec.GetAccessRules(true,true,typeof(NTAccount)))
                    {
                        Console.WriteLine("{0} {1} {2} acess for {3}", Path.GetFileName(fileName),
                            rule.AccessControlType == AccessControlType.Allow ? "Provides" : "denies",
                            rule.FileSystemRights, rule.IdentityReference);
                    }

                    FileSystemAccessRule newRule = new FileSystemAccessRule(new System.Security.Principal.NTAccount(@"BUILTIN\Users"), FileSystemRights.FullControl, AccessControlType.Allow);
                    fsec.AddAccessRule(newRule);
                    File.SetAccessControl(fileName, fsec);

                    Console.WriteLine();
                    Console.WriteLine("Add ACL");
                    foreach (FileSystemAccessRule rule in fsec.GetAccessRules(true, true, typeof(NTAccount)))
                    {
                        Console.WriteLine("{0} {1} {2} acess for {3}", Path.GetFileName(fileName),
                            rule.AccessControlType == AccessControlType.Allow ? "Provides" : "denies",
                            rule.FileSystemRights, rule.IdentityReference);
                    }
                }
                Console.WriteLine("Directory ACL");
                DirectoryInfo di = new DirectoryInfo(dir);
                DirectorySecurity dsec = di.GetAccessControl();
                foreach (FileSystemAccessRule rule in dsec.GetAccessRules(true,true,typeof(NTAccount)))
                {
                    Console.WriteLine("{0} {1} {2} acess for {3}", dir,
                           rule.AccessControlType == AccessControlType.Allow ? "Provides" : "denies",
                           rule.FileSystemRights, rule.IdentityReference);
                }
                
                Console.Read();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.Read();
            }
        }
    }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值