获取文件夹的权限(简短版)

时间:2013-09-03 08:34:19

标签: c# .net-3.5

我正在使用以下代码返回详细的文件夹权限

enter image description here

return (from permissionName in Enum.GetNames(typeof(FileSystemRights))
            let val =
                Convert.ToInt32(
                    Enum.Parse(typeof(FileSystemRights), permissionName), CultureInfo.InvariantCulture)
            where
                (val != 0x1f01ff) && (val != 0x301bf) && (val != 0x20089) && (val != 0x200a9) && (val != 0x116)
            where ((int)this.FileSystemRule.FileSystemRights & val) > 0
            select permissionName).ToList();

我如何获得简短版本:

enter image description here

换句话说,我只想返回

  1. 完全控制
  2. 修改
  3. 阅读&执行
  4. 列出文件夹内容
  5. 特别(任何其他组合)

2 个答案:

答案 0 :(得分:5)

只需列出您想要的权限,即可简化逻辑。例如:

private readonly FileSystemRights[] namesIWant = new FileSystemRights[]
{
    FileSystemRights.FullControl, 
    FileSystemRights.Modify, 
    FileSystemRights.ReadAndExecute,
    FileSystemRights.ListDirectory,
    FileSystemRights.Read,
    FileSystemRights.Write
};

然后,您的LINQ表达式变为:

return (from perm in namesIWant
        where (this.FileSystemRule.FileSystemRights & perm) != 0
        select perm.ToString()).ToList();

答案 1 :(得分:1)

我想和你分享一下, 为了使它适用于我,我必须将> singe更改为== @Jim Mischel的代码修改为:

return (from perm in namesIWant
        where (this.FileSystemRule.FileSystemRights & perm) == perm 
        select perm.ToString()).ToList();

还会从FileSystemRights.ListDirectory,移除NamesIWant,因为它包含ReadReadData,如果您保留它,则会有重复的值。