如何知道用户是否可以读取并列出目录中的文件

本文关键字:文件 用户 何知道 是否 读取 | 更新日期: 2023-09-27 18:24:02

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

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

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

我所期待的是,有一种方法可以做到这一点:

DirectoryInfo Folder = new DirectoryInfo(folderName, UserCredentials);

如果这个用户没有权限,这一行会显示一个异常,或者可能是检查用户权限的一种方法。

谢谢。。。

如何知道用户是否可以读取并列出目录中的文件

我相信您需要调用DirectoryInfo对象上的SetAccessControl方法来实现这一点。看见https://msdn.microsoft.com/en-us/library/system.io.directoryinfo.setaccesscontrol(v=vs.110).aspx获取有关此方法的详细信息。

请参阅下面的示例

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;
}

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

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。您也可以将其更改为检查文件权限。