【问题标题】:How to know if a user can read and list files of a directory如何知道用户是否可以读取和列出目录的文件
【发布时间】:2016-02-25 22:59:22
【问题描述】:

我的计算机中有一个文件夹,我使用 DirectoryInfo 获取该文件夹中的所有文件。但是,这是使用我的用户帐户。我必须使用另一个用户帐户的权限,并且我需要知道这个其他帐户是否可以读取和列出该文件夹中的文件。

这是我为获取文件而编写的代码:

DirectoryInfo Folder = new DirectoryInfo(folderName);
FileInfo[] Files = Folder.GetFiles(search, SearchOption.TopDirectoryOnly);

我期待的是存在一种方法来做这样的事情:

DirectoryInfo Folder = new DirectoryInfo(folderName, UserCredentials);

如果此用户没有权限,则此行将引发异常或检查用户权限的方法。

谢谢...

【问题讨论】:

    标签: c# .net c#-4.0


    【解决方案1】:

    我相信您需要调用 DirectoryInfo 对象的 SetAccessControl 方法来完成此操作。有关此方法的更多信息,请参阅https://msdn.microsoft.com/en-us/library/system.io.directoryinfo.setaccesscontrol(v=vs.110).aspx

    【讨论】:

      【解决方案2】:

      看下面的例子

      public bool CheckFolderPermissions(string folderPath)
      {
       WindowsIdentity currentUser = WindowsIdentity.GetCurrent();
       var domainAndUser = currentUser.Name;
       DirectoryInfo dirInfo = new DirectoryInfo(folderPath);
       DirectorySecurity dirAC =     dirInfo.GetAccessControl(AccessControlSections.All);
       AuthorizationRuleCollection rules = dirAC.GetAccessRules(true, true, typeof(NTAccount));
      
       foreach (AuthorizationRule rule in rules)
       {
           if (rule.IdentityReference.Value.Equals(domainAndUser, StringComparison.CurrentCultureIgnoreCase))
           {
               if ((((FileSystemAccessRule)rule).FileSystemRights & FileSystemRights.WriteData) > 0)
               return true;
           }
        }
       return false;
      }
      

      【讨论】:

        【解决方案3】:

        这是一个检查另一个用户的目录权限的函数:

        using System.IO;
        using System.Security.AccessControl;
        public static FileSystemRights GetDirectoryPermissions(string user, string domainName, string folderPath)
        {
            if (!Directory.Exists(folderPath))
            {
                return (0);
            }
        
            string identityReference = ((domainName + @"\" + user) as string).ToLower();
            DirectorySecurity dirSecurity = Directory.GetAccessControl(folderPath, AccessControlSections.Access);
            foreach (FileSystemAccessRule fsRule in dirSecurity.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
            {
                if (fsRule.IdentityReference.Value.ToLower() == identityReference)
                {
                    return (fsRule.FileSystemRights);
                }
            }
            return (0);
        }
        

        如果用户有任何权限,则返回标志,否则返回0。您也可以更改它以检查文件权限。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-29
          • 1970-01-01
          • 2021-04-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多