参考这个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();
    }}

解决方案 »

  1.   

    不要告诉我先删除已经存在的~/test 目录,然后运行代码测试。 但是这就成了测试 “目录修改删除”权限了,如果没有删除修改权限,那返回的创建目录权限也是不正确的
      

  2.   


    private bool IsDirCreate() 

          string path = System.DateTime.Now().ToString("yyyyMMddHHmmss");      try 
          { 
              Directory.CreateDirectory(Server.MapPath("~/"+path)); 
              return true; 
          } 
          catch 
          { 
              return false; 
          } 

    那何不这样修改呢?不会这么巧存在同样的目录吧
      

  3.   


    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();
        }}参考一下吧
      

  4.   


    给系统做身份模拟,
    http://www.zhangyongjun.com/blog/article.asp?id=141身份模拟的加密.<identity impersonate="true" 
          userName="registry:HKLM\Software\MessagesolutionSharp\Identity\ASPNET_SETREG,userName" 
          password="registry:HKLM\Software\MessagesolutionSharp\Identity\ASPNET_SETREG,password"/>aspnet_setreg.exe  下栽,在命令行中加秘.