2017-02-15 72 views
0

我正在扫描文件夹中的文件,我需要以任何方式获取当前用户的每个文件的权限以表示为字符串。 因此,对于附加文件的属性,我想代表f-m-r-w 字符串。获取当前用户的文件权限.net

我试图在我这样的扫描循环中完成此操作,但获取空字符串。你能暗示我应该从哪里出发或选择另一种方法?提前致谢!

  string permissionShort = string.Empty; 
      DirectorySecurity dSecurity = Directory.GetAccessControl(_directory.FullName); 
      foreach (FileSystemAccessRule rule in dSecurity.GetAccessRules(true, true, typeof(NTAccount))) 
      { 
       if (rule.FileSystemRights == FileSystemRights.Write) 
        permissionShort = permissionShort + "x"; 
       if (rule.FileSystemRights == FileSystemRights.Read) 
        permissionShort = permissionShort + "x"; 
       if (rule.FileSystemRights == FileSystemRights.AppendData) 
        permissionShort = permissionShort + "x"; 
       if (rule.FileSystemRights == FileSystemRights.Modify) 
        permissionShort = permissionShort + "x"; 
       if (rule.FileSystemRights == FileSystemRights.ExecuteFile) 
        permissionShort = permissionShort + "x"; 
      } 
+0

大概应该是副本http://stackoverflow.com/questions/1339976/how-to-check-if-any-flags-of-a-flag-combination-are-set的,但需要一些调整问题...所以只是评论,而不是VTC。 –

回答

0

FileSystemRights是一个被标记的枚举,这意味着必须执行与操作,以测试枚举的单个值。

string scanPath = @"C:\Test"; 
    string permissionShort = string.Empty; 
    DirectorySecurity dSecurity = Directory.GetAccessControl(scanPath); 
    foreach (FileSystemAccessRule rule in dSecurity.GetAccessRules(true, true, typeof(NTAccount))) 
    { 
     permissionShort += rule.FileSystemRights.ToString() + " : "; 
     permissionShort += ((rule.FileSystemRights & FileSystemRights.FullControl) == FileSystemRights.FullControl) ? "f" : "-"; 
     permissionShort += ((rule.FileSystemRights & FileSystemRights.Write)== FileSystemRights.Write) ? "w" : "-"; 
     permissionShort += ((rule.FileSystemRights & FileSystemRights.Read) == FileSystemRights.Read) ? "r" : "-"; 
     permissionShort += ((rule.FileSystemRights & FileSystemRights.AppendData) == FileSystemRights.AppendData) ? "a" : "-"; 
     permissionShort += ((rule.FileSystemRights & FileSystemRights.Modify) == FileSystemRights.Modify) ? "m" : "-"; 
     permissionShort += ((rule.FileSystemRights & FileSystemRights.ExecuteFile) == FileSystemRights.ExecuteFile) ? "e" : "-"; 
     permissionShort += "\n"; 
    } 
+0

谢谢。它工作但给3次结果,我怀疑它计算了系统上的所有帐户。 – Madcode