C#文件夹权限操作工具类

2021-04-12 05:26

阅读:555

标签:rect   try   需要   cat   std   sse   ret   obj   section   

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

namespace CvNetVideo.Play
{
    /// 
    /// 目录权限辅助类
    /// 
    public class DictionaryHelper
    {
        /// 
        /// 需要足够的权限才能执行此操作:Get filepath rights
        /// 
        /// 
        /// 
        public static List GetRights(string path)
        {
            List ret = new List();

            DirectorySecurity dirSec = Directory.GetAccessControl(path, AccessControlSections.All);
            AuthorizationRuleCollection rules = dirSec.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount));
            foreach (FileSystemAccessRule rule in rules)
            {
                ret.Add(rule.FileSystemRights);
            }
            return ret;
        }

        //public static void AccessExample() {
        //    try
        //    {
        //        string DirectoryName = "TestDirectory";

        //        Console.WriteLine("Adding access control entry for " + DirectoryName);

        //        // Add the access control entry to the directory.
        //        AddDirectorySecurity(DirectoryName, @"MYDOMAIN\MyAccount", FileSystemRights.ReadData, AccessControlType.Allow);

        //        Console.WriteLine("Removing access control entry from " + DirectoryName);

        //        // Remove the access control entry from the directory.
        //        RemoveDirectorySecurity(DirectoryName, @"MYDOMAIN\MyAccount", FileSystemRights.ReadData, AccessControlType.Allow);

        //        Console.WriteLine("Done.");
        //    }
        //    catch (Exception e)
        //    {
        //        Console.WriteLine(e);
        //    }

        //    Console.ReadLine();
        //}

        // Adds an ACL entry on the specified directory for the specified account.
        public static void AddDirectorySecurity(string FileName, string Account, FileSystemRights Rights, AccessControlType ControlType)
        {
            // Create a new DirectoryInfo object.
            DirectoryInfo dInfo = new DirectoryInfo(FileName);

            // Get a DirectorySecurity object that represents the 
            // current security settings.
            DirectorySecurity dSecurity = dInfo.GetAccessControl();

            // Add the FileSystemAccessRule to the security settings. 
            dSecurity.AddAccessRule(new FileSystemAccessRule(Account,
                                                            Rights,
                                                            ControlType));

            // Set the new access settings.
            dInfo.SetAccessControl(dSecurity);

        }

        // Removes an ACL entry on the specified directory for the specified account.
        public static void RemoveDirectorySecurity(string FileName, string Account, FileSystemRights Rights, AccessControlType ControlType)
        {
            // Create a new DirectoryInfo object.
            DirectoryInfo dInfo = new DirectoryInfo(FileName);

            // Get a DirectorySecurity object that represents the 
            // current security settings.
            DirectorySecurity dSecurity = dInfo.GetAccessControl();

            // Add the FileSystemAccessRule to the security settings. 
            dSecurity.RemoveAccessRule(new FileSystemAccessRule(Account,
                                                            Rights,
                                                            ControlType));

            // Set the new access settings.
            dInfo.SetAccessControl(dSecurity);

        }
    }
}

 

C#文件夹权限操作工具类

标签:rect   try   需要   cat   std   sse   ret   obj   section   

原文地址:https://www.cnblogs.com/boonya/p/9013564.html


评论


亲,登录后才可以留言!