如何知道用户是否可以读取并列出目录中的文件
本文关键字:文件 用户 何知道 是否 读取 | 更新日期: 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。您也可以将其更改为检查文件权限。