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. 読んだ
  6. 書く
  7. 特別(他の組み合わせの場合)
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,、からも削除します。そのままにしておくと、値が重複します。NamesIWantReadReadData

于 2013-09-06T07:38:28.823 に答える