日期:2014-05-20  浏览次数:21077 次

怎么判断一个目录是否有写入权限?
本帖最后由 vip123 于 2012-09-27 18:28:22 编辑 要在一个目录里(本机,或者其它机器的共享目录)创建一个新的子目录,不知道是否能在这个目录里创建新的子目录,所以要在创建之前做一下判断。请问有什么直接的判断方法没有?

(不要通过 try 方法尝试先去创建,报错表明是只读的)
------最佳解决方案--------------------
using System;
using System.IO;
using System.Security.AccessControl;
using System.Security.Principal;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string directory = @"C:\downloads";

            DirectoryInfo di = new DirectoryInfo(directory);

            DirectorySecurity ds = di.GetAccessControl();

            foreach (AccessRule rule in ds.GetAccessRules(true, true, typeof(NTAccount)))
            {
                Console.WriteLine("Identity = {0}; Access = {1}", rule.IdentityReference.Value, rule.AccessControlType);
            }
        }
    }
}
------其他解决方案--------------------
貌似有个 

File.GetAccessControl(filePath)=>FileSecurity
FileSecurity.GetAccessRules(
bool includeExplicit,//true
bool includeInherited,//true
Type targetType//typeof(SecurityIdentifier)
)=>System.Security.AccessControl.AuthorizationRuleCollection
//遍历System.Security.AccessControl.AuthorizationRuleCollection
//检查每个子元素,如果是Full...表示具有所有权限。
File.GetAttributes=>FileAttributes

//此方法无法判断文件是否死锁了



------其他解决方案--------------------

DirectoryInfo dirinfo = new DirectoryInfo(@"c:\test");

            System.Security.AccessControl.DirectorySecurity sec = dirinfo.GetAccessControl();

            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();

每个用户对应的权限