C#设置与获取目录权限(.net控制ACL) 想用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,很容易看懂上面的代码。 但是貌似这个程序需要以管理员身份来运行。^_^
using System;
using System.Collections;
using System.IO;
using System.Security.AccessControl;
staticclass Tester


{
publicstatic
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();
}
}
staticpublic
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,很容易看懂上面的代码。 但是貌似这个程序需要以管理员身份来运行。^_^

添加至收藏夹