如何检查文件夹的可访问性?

时间:2014-09-09 16:57:38

标签: c# .net directory

我有一个共享文件夹。如何检查C#是否已授予当前用户访问该文件夹的权限?

我已经尝试SecurityManager.IsGranted但不知怎的,这对我没有好处。可能是因为它是用于文件,而不是用于文件夹。

2 个答案:

答案 0 :(得分:5)

如果您未获得许可,请使用Directory.Exists它将返回false

  

请参阅备注部分   MSDN

同样如@jbriggs的答案所示,如果您无法访问,则应获得UnautorizedAccessException

答案 1 :(得分:-1)

如果我没记错的话,你只需要尝试在文件夹中写一些内容或从文件夹中读取内容并捕获异常。

编辑:您可以执行以下操作,但我不确定它是否适用于所有情况(例如,如果允许或拒绝用户组的权限)

public bool HasAccess(string path, string user)
{
System.Security.Principal.SecurityIdentifier sid = new System.Security.Principal.SecurityIdentifier(System.Security.Principal.WellKnownSidType.WorldSid, null);
System.Security.Principal.NTAccount acct = sid.Translate(typeof(System.Security.Principal.NTAccount)) as System.Security.Principal.NTAccount;
bool userHasAccess = false;
if( Directory.Exists(path))
{
  DirectorySecurity sec = Directory.GetAccessControl(path);
  AuthorizationRuleCollection rules = sec.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount));
  foreach (AccessRule rule in rules)
  {
    // check is the Everyone account is denied
    if (rule.IdentityReference.Value == acct.ToString() && 
        rule.AccessControlType == AccessControlType.Deny)
    {
      userHasAccess = false;
      break;
    }
    if (rule.IdentityReference.Value == user)
    {
      if (rule.AccessControlType != AccessControlType.Deny)                 
        userHasAccess = true;
      else
        userHasAccess = false;
      break;
    }
  }
}
return userHasAccess;
}