亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

采用C#代碼動態設置文件權限

2019-10-29 21:17:52
字體:
來源:轉載
供稿:網友

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

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

    1.現在看一下FileSystemAccessRule的實現代碼:

 public FileSystemAccessRule(   IdentityReference identity,   FileSystemRights fileSystemRights,   AccessControlType type )   : this(    identity,    AccessMaskFromRights( fileSystemRights, type ),    false,    InheritanceFlags.None,    PropagationFlags.None,    type )  {  }  public FileSystemAccessRule(   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 FileSystemAccessRule(   IdentityReference identity,   FileSystemRights fileSystemRights,   InheritanceFlags inheritanceFlags,   PropagationFlags propagationFlags,   AccessControlType type )   : this(    identity,    AccessMaskFromRights( fileSystemRights, type ),    false,    inheritanceFlags,    propagationFlags,    type )  {  }  public FileSystemAccessRule(   String identity,   FileSystemRights fileSystemRights,   InheritanceFlags inheritanceFlags,   PropagationFlags propagationFlags,   AccessControlType type )   : this(    new NTAccount(identity),    AccessMaskFromRights( fileSystemRights, type ),    false,    inheritanceFlags,    propagationFlags,    type )  {  }  internal FileSystemAccessRule(   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.由于FileSystemAccessRule繼承自AccessRule,現在看一下AccessRule的源碼:

/// <summary> /// 表示用戶的標識、訪問掩碼和訪問控制類型(允許或拒絕)的組合。<see cref="T:System.Security.AccessControl.AccessRule"/> 對象還包含有關子對象如何繼承規則以及如何傳播繼承的信息。 /// </summary> public abstract class AccessRule : AuthorizationRule { /// <summary> /// 使用指定的值初始化 <see cref="T:System.Security.AccessControl.AccessRule"/> 類的一個新實例。 /// </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 AccessRule(IdentityReference identity, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type); /// <summary> /// 獲取與此 <see cref="T:System.Security.AccessControl.AccessRule"/> 對象關聯的 <see cref="T:System.Security.AccessControl.AccessControlType"/> 對象。 /// </summary> ///  /// <returns> /// 與此 <see cref="T:System.Security.AccessControl.AccessRule"/> 對象關聯的 <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 (FileSystemAccessRule rule in dSecurity.GetAccessRules(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 accessRule = new FileSystemAccessRule("Users", permission,           InheritanceFlags.None,           PropagationFlags.NoPropagateInherit,           AccessControlType.Allow);    var info = new DirectoryInfo(path);    var security = info.GetAccessControl(AccessControlSections.Access);    bool result;    security.ModifyAccessRule(AccessControlModification.Set, accessRule, out result);    if (!result)     return false;    const InheritanceFlags iFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;    accessRule = new FileSystemAccessRule("Users", permission,           iFlags,           PropagationFlags.InheritOnly,           AccessControlType.Allow);    security.ModifyAccessRule(AccessControlModification.Add, accessRule, 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);   }  }

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

以上就是本文的全部內容,希望對大家有所幫助,同時也希望多多支持VEVB武林網!


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品视频成人| 久久久97精品| 55夜色66夜色国产精品视频| 亚洲国产成人精品久久| 久久久精品久久久久| 日韩欧美精品免费在线| 欧美激情一区二区三区高清视频| 91免费观看网站| 日韩在线视频观看正片免费网站| 国产热re99久久6国产精品| 亚洲自拍小视频免费观看| 日韩中文字幕精品视频| 韩国三级日本三级少妇99| 亚洲第一区第一页| 热久久免费视频精品| 福利一区福利二区微拍刺激| 免费91麻豆精品国产自产在线观看| 国产成人精品网站| 日韩女优在线播放| 国产亚洲欧美日韩精品| 欧美激情免费视频| 日韩亚洲欧美中文高清在线| 亚洲福利在线播放| 亚洲国产91精品在线观看| 国产日韩专区在线| 久久久久久久久电影| 欧美做受高潮电影o| 午夜精品久久久久久99热软件| 精品一区二区三区四区在线| 国产精品久久久久av| 久久久久久69| 久久久中文字幕| 成人精品久久久| www.日韩系列| 成人高清视频观看www| 亚洲日本中文字幕| 国产69精品久久久久99| 国产成人福利视频| 91高清视频免费| 亚洲精品wwww| 欧美噜噜久久久xxx| 欧美日韩国产二区| 91网站在线免费观看| 亚洲国产一区自拍| 亚洲国产成人精品女人久久久| 国产精品入口免费视| 午夜精品久久久久久久久久久久| 日韩中文字幕精品视频| 国产一区二区日韩| 国产精品入口尤物| 成人国产精品色哟哟| 亚洲精品成a人在线观看| 国产99久久久欧美黑人| 成人av.网址在线网站| 永久免费看mv网站入口亚洲| 久久99视频精品| 夜夜嗨av一区二区三区四区| 中文字幕视频在线免费欧美日韩综合在线看| www.久久久久| 国产精品久久久久久av福利| 国产一区视频在线播放| 亚洲国产精彩中文乱码av在线播放| 日韩中文字幕国产精品| 日本成人免费在线| 国产一区二区三区精品久久久| 国模叶桐国产精品一区| 91精品国产91久久久久久久久| 成人av.网址在线网站| 高清欧美性猛交xxxx| 国产美女91呻吟求| 欧美激情亚洲另类| 欧美做受高潮1| 久久久久国色av免费观看性色| 亚洲图片制服诱惑| 尤物99国产成人精品视频| 亚洲福利视频网站| 91av视频导航| 亚洲一区二区三区视频播放| 奇米四色中文综合久久| 91精品国产99久久久久久| 亚洲乱码国产乱码精品精天堂| 91精品国产91久久久久久最新| 国产精品极品在线| 欧美丰满少妇xxxx| 亚洲最大福利视频| 日韩禁在线播放| 一区二区三区四区在线观看视频| 91国自产精品中文字幕亚洲| 最近免费中文字幕视频2019| 日本久久久a级免费| 国产精品午夜视频| 亚洲第一精品夜夜躁人人爽| 91wwwcom在线观看| 欧美做受高潮1| 久久精品视频网站| 高清一区二区三区四区五区| 亚洲深夜福利在线| 韩国19禁主播vip福利视频| 欧美理论片在线观看| 国产精品成人在线| 国产一区二区在线免费视频| 久久精品国产清自在天天线| 中日韩美女免费视频网址在线观看| 另类专区欧美制服同性| 欧美在线视频一区二区| 日韩在线观看免费高清完整版| 日本精品久久久| 91性高湖久久久久久久久_久久99| 亚洲欧美国产精品专区久久| 久久午夜a级毛片| 成人黄色网免费| 亚洲一区二区在线播放| 久久黄色av网站| 26uuu国产精品视频| 欧美日韩国产中文精品字幕自在自线| 超碰精品一区二区三区乱码| 亚洲精品欧美日韩| 国产午夜精品久久久| www国产亚洲精品久久网站| www.欧美免费| 亚洲色图色老头| 中文字幕亚洲欧美日韩高清| 精品免费在线观看| 久久伊人免费视频| 亚洲精品女av网站| 欧美日韩成人黄色| 97精品视频在线| 成人午夜在线观看| 欧美国产日本高清在线| 2019中文字幕在线观看| 欧美日韩精品在线视频| 亚洲第一精品夜夜躁人人躁| 狠狠操狠狠色综合网| 日本精品视频网站| 97国产精品视频人人做人人爱| 欧美性xxxxxxx| 欧美黑人xxxx| 亚洲精品久久久久中文字幕二区| 欧美一区深夜视频| 国产精品欧美亚洲777777| 亚洲欧美激情视频| 日韩免费av一区二区| 欧美激情按摩在线| 欧美在线观看一区二区三区| 亚洲图片欧美日产| 久久国产加勒比精品无码| 国产精品国产三级国产专播精品人| 亚洲自拍中文字幕| 欧美激情第1页| 亚洲精品成人久久久| 上原亚衣av一区二区三区| 韩国日本不卡在线| 一区二区国产精品视频| 亚洲人av在线影院| 欧美与黑人午夜性猛交久久久| 欧美激情a在线| 国产日韩欧美在线播放| 国产精品1234| 亚洲国产天堂久久国产91| 8090成年在线看片午夜| 成人97在线观看视频| 国产精品一区二区久久精品| 久久久久久久国产| 国产精品自拍小视频|