亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#設置文件權限

發布時間:2020-08-15 15:08:36 來源:網絡 閱讀:623 作者:彭澤0902 欄目:編程語言

  在開發中,我們經常會使用IO操作,例如創建,刪除文件等操作。在項目中這樣的需求也較多,我們也會經常對這些操作進行編碼,但是對文件的權限進行設置,這樣的操作可能會手動操作,現在介紹一種采用代碼動態對文件設置權限的操作。

   在對文件進行權限設置在DOtNet中,會采用FileSystemAcce***ule類進行文件的權限操作。

    1.現在看一下FileSystemAcce***ule的實現代碼:

public FileSystemAcce***ule(
            IdentityReference identity,
            FileSystemRights fileSystemRights,
            AccessControlType type )
            : this(
                identity,
                AccessMaskFromRights( fileSystemRights, type ),
                false,
                InheritanceFlags.None,
                PropagationFlags.None,
                type )
        {
        }

        public FileSystemAcce***ule(
            String identity,
            FileSystemRights fileSystemRights,
            AccessControlType type )
            : this(
                new NTAccount(identity),
                AccessMaskFromRights( fileSystemRights, type ),
                false,
                InheritanceFlags.None,
                PropagationFlags.None,
                type )
        {
        }

        //
        // Constructor for creating access rules for folder objects
        //

        public FileSystemAcce***ule(
            IdentityReference identity,
            FileSystemRights fileSystemRights,
            InheritanceFlags inheritanceFlags,
            PropagationFlags propagationFlags,
            AccessControlType type )
            : this(
                identity,
                AccessMaskFromRights( fileSystemRights, type ),
                false,
                inheritanceFlags,
                propagationFlags,
                type )
        {
        }

        public FileSystemAcce***ule(
            String identity,
            FileSystemRights fileSystemRights,
            InheritanceFlags inheritanceFlags,
            PropagationFlags propagationFlags,
            AccessControlType type )
            : this(
                new NTAccount(identity),
                AccessMaskFromRights( fileSystemRights, type ),
                false,
                inheritanceFlags,
                propagationFlags,
                type )
        {
        }
        internal FileSystemAcce***ule(
            IdentityReference identity,
            int accessMask,
            bool isInherited,
            InheritanceFlags inheritanceFlags,
            PropagationFlags propagationFlags,
            AccessControlType type )
            : base(
                identity,
                accessMask,
                isInherited,
                inheritanceFlags,
                propagationFlags,
                type )
        {
        }

        #endregion

        #region Public properties

        public FileSystemRights FileSystemRights
        {
            get { return RightsFromAccessMask( base.AccessMask ); }
        }

 
        internal static int AccessMaskFromRights( FileSystemRights fileSystemRights, AccessControlType controlType )
        {
            if (fileSystemRights < (FileSystemRights) 0 || fileSystemRights > FileSystemRights.FullControl)
                throw new ArgumentOutOfRangeException("fileSystemRights", Environment.GetResourceString("Argument_InvalidEnumValue", fileSystemRights, "FileSystemRights"));
            Contract.EndContractBlock();

            if (controlType == AccessControlType.Allow) {
                fileSystemRights |= FileSystemRights.Synchronize;
            }
            else if (controlType == AccessControlType.Deny) {
                if (fileSystemRights != FileSystemRights.FullControl &&
                    fileSystemRights != (FileSystemRights.FullControl & ~FileSystemRights.DeleteSubdirectoriesAndFiles))
                    fileSystemRights &= ~FileSystemRights.Synchronize;
            }

            return ( int )fileSystemRights;
        }

        internal static FileSystemRights RightsFromAccessMask( int accessMask )
        {
            return ( FileSystemRights )accessMask;
        }

    }

    2.由于FileSystemAcce***ule繼承自Acce***ule,現在看一下Acce***ule的源碼:

  /// <summary>
  /// 表示用戶的標識、訪問掩碼和訪問控制類型(允許或拒絕)的組合。<see cref="T:System.Security.AccessControl.Acce***ule"/> 對象還包含有關子對象如何繼承規則以及如何傳播繼承的信息。
  /// </summary>
  public abstract class Acce***ule : AuthorizationRule
  {
    /// <summary>
    /// 使用指定的值初始化 <see cref="T:System.Security.AccessControl.Acce***ule"/> 類的一個新實例。
    /// </summary>
    /// <param name="identity">應用訪問規則的標識。此參數必須是可以強制轉換為 <see cref="T:System.Security.Principal.SecurityIdentifier"/> 的對象。</param><param name="accessMask">此規則的訪問掩碼。訪問掩碼是一個 32 位的匿名位集合,其含義是由每個集成器定義的。</param><param name="isInherited">如果此規則繼承自父容器,則為 true。</param><param name="inheritanceFlags">訪問規則的繼承屬性。</param><param name="propagationFlags">繼承的訪問規則是否自動傳播。如果 <paramref name="inheritanceFlags"/> 設置為 <see cref="F:System.Security.AccessControl.InheritanceFlags.None"/>,則將忽略傳播標志。</param><param name="type">有效的訪問控制類型。</param><exception cref="T:System.ArgumentException"><paramref name="identity"/> 參數的值不能強制轉換為 <see cref="T:System.Security.Principal.SecurityIdentifier"/>,或者 <paramref name="type"/> 參數包含無效值。</exception><exception cref="T:System.ArgumentOutOfRangeException"><paramref name="accessMask"/> 參數的值為零,或者 <paramref name="inheritanceFlags"/> 或 <paramref name="propagationFlags"/> 參數包含無法識別的標志值。</exception>
    protected Acce***ule(IdentityReference identity, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type);
    /// <summary>
    /// 獲取與此 <see cref="T:System.Security.AccessControl.Acce***ule"/> 對象關聯的 <see cref="T:System.Security.AccessControl.AccessControlType"/> 對象。
    /// </summary>
    /// 
    /// <returns>
    /// 與此 <see cref="T:System.Security.AccessControl.Acce***ule"/> 對象關聯的 <see cref="T:System.Security.AccessControl.AccessControlType"/> 對象。
    /// </returns>
    public AccessControlType AccessControlType { get; }
  }

  看了DotNet中實現文件權限設置的操作的類,現在提供幾個具體的文件設置操作代碼:

   3.獲取目錄權限列表:

        /// <summary>
         /// 獲取目錄權限列表
        /// </summary>
        /// <param name="path">目錄的路徑。</param>
        /// <returns>指示目錄的權限列表</returns>
        public IList<FileSystemRights> GetDirectoryPermission(string path)
        {
            try
            {
                if (!DirectoryExists(path))
                    return null;

                IList<FileSystemRights> result = new List<FileSystemRights>();
                var dSecurity = Directory.GetAccessControl(new DirectoryInfo(path).FullName);
                foreach (FileSystemAcce***ule rule in dSecurity.GetAcce***ules(true, true, typeof(NTAccount)))
                    result.Add(rule.FileSystemRights);

                return result;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }

   4.設置目錄權限

        /// <summary>
        ///設置目錄權限
        /// </summary>
        /// <param name="path">目錄的路徑。</param>
        /// <param name="permission">在目錄上設置的權限。</param>
        /// <returns>指示是否在目錄上應用權限的值。</returns>
        public bool SetDirectoryPermission(string path, FileSystemRights permission)
        {
            try
            {
                if (!DirectoryExists(path))
                    return false;

                var acce***ule = new FileSystemAcce***ule("Users", permission,
                                            InheritanceFlags.None,
                                            PropagationFlags.NoPropagateInherit,
                                            AccessControlType.Allow);

                var info = new DirectoryInfo(path);
                var security = info.GetAccessControl(AccessControlSections.Access);

                bool result;
                security.ModifyAcce***ule(AccessControlModification.Set, acce***ule, out result);

                if (!result)
                    return false;

                const InheritanceFlags iFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;

                acce***ule = new FileSystemAcce***ule("Users", permission,
                                            iFlags,
                                            PropagationFlags.InheritOnly,
                                            AccessControlType.Allow);

                security.ModifyAcce***ule(AccessControlModification.Add, acce***ule, out result);

                if (!result)
                    return false;

                info.SetAccessControl(security);

                return true;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }

  5.設置目錄權限列表

        /// <summary>
        /// 設置目錄權限列表
        /// </summary>
        /// <param name="path">目錄的路徑。</param>
        /// <param name="permissions">在目錄上設置的權限。</param>
        /// <returns>指示是否在目錄上應用權限的值。</returns>
        public bool SetDirectoryPermissions(string path, FileSystemRights[] permissions)
        {
            try
            {
                if (!DirectoryExists(path) || permissions == null || !permissions.Any())
                    return false;

                foreach (var permission in permissions)
                    if (!SetDirectoryPermission(path, permission))
                        return false;

                return true;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }

     以上是對文件權限設置操作的一個簡單介紹。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

轮台县| 博爱县| 鞍山市| 蒙自县| 邵武市| 兴义市| 凤庆县| 郯城县| 高邮市| 博客| 奇台县| 襄城县| 河东区| 水城县| 临高县| 保靖县| 哈巴河县| 海南省| 沙雅县| 肥西县| 广东省| 古浪县| 黄浦区| 渝北区| 平利县| 鄂托克旗| 新宁县| 六枝特区| 阿勒泰市| 耿马| 馆陶县| 体育| 河津市| 乐亭县| 奈曼旗| 东乡| 太白县| 察隅县| 岳阳县| 阿坝| 永胜县|