3

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

在此处输入图像描述

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();

我怎样才能得到简短的版本:

在此处输入图像描述

换句话说,我只想返回

  1. 完全控制
  2. 调整
  3. 读取和执行
  4. 列出文件夹内容
  5. 特殊(适用于任何其他组合)
4

2 回答 2

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();
于 2013-09-03T15:40:13.247 回答
1

我想和你分享这个,为了让它对我有用,我不得不将单曲更改>== @Jim Mischel 的代码被修改为:

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

也从中删除FileSystemRights.ListDirectory,NamesIWant因为它包含Read, 并且ReadData,如果您保留它,您将有重复的值。

于 2013-09-06T07:38:28.823 回答