VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > C#教程 >
  • c#设置与获取目录权限.net控制ACL

制作者:剑锋冷月 单位:无忧统计网,www.51stat.net
 

  想用c#来设置和读取ntfs分区上的目录权限,找了很多资料,未果。终于发现了一段vb.net的代码,做了修改,以C#展示给大家。

using System;
using System.Collections;
using System.IO;
using System.Security.AccessControl;
static class Tester
{
  public static void Main()
  {
    try
    {
      string filename = @"f:k"; //目标目录
      string account = @"Administrator";//用户名
      string userrights = @"RW";//权限字符串,自己定义的
      AddDirectorySecurity(filename, account, userrights);
      Console.ReadLine();
    }
    catch (Exception e)
    {
      Console.WriteLine(e);
      Console.ReadLine();
    }
  }
  static public void AddDirectorySecurity(string FileName, string Account, string UserRights)
  {
    FileSystemRights Rights = new FileSystemRights();
    if (UserRights.IndexOf("R") >= 0)
    {
      Rights = Rights | FileSystemRights.Read;
    }
    if (UserRights.IndexOf("C") >= 0)
    {
      Rights = Rights | FileSystemRights.ChangePermissions;
    }
    if (UserRights.IndexOf("F") >= 0)
    {
      Rights = Rights | FileSystemRights.FullControl;
    }
    if (UserRights.IndexOf("W") >= 0)
    {
      Rights = Rights | FileSystemRights.Write;
    }
    bool ok;
    DirectoryInfo dInfo = new DirectoryInfo(FileName);
    DirectorySecurity dSecurity = dInfo.GetAccessControl();
    InheritanceFlags iFlags = new InheritanceFlags();
    iFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;
    FileSystemAccessRule AccessRule2 = new FileSystemAccessRule(Account, Rights, iFlags, PropagationFlags.None, AccessControlType.Allow);
    dSecurity.ModifyAccessRule(AccessControlModification.Add, AccessRule2, out ok);
    dInfo.SetAccessControl(dSecurity);
    //列出目标目录所具有的权限
    DirectorySecurity sec = Directory.GetAccessControl(FileName, AccessControlSections.All);
    foreach (FileSystemAccessRule rule in sec.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
    {
      Console.WriteLine("----------------------------------");
      Console.WriteLine(rule.IdentityReference.Value);
      if ((rule.FileSystemRights & FileSystemRights.Read) != 0)
        Console.WriteLine(rule.FileSystemRights.ToString());
    }
    Console.Read();
  }
}

  对照MSDN,很容易看懂上面的代码。 但是貌似这个程序需要以管理员身份来运行。^_^



相关教程