按字母顺序排列Directory.GetAccessControl.GetAccessRules

时间:2017-01-17 15:23:11

标签: c#

我有以下代码来获取共享驱动器的文件夹权限:

DirectorySecurity dSecurity = Directory.GetAccessControl(directory);

foreach (FileSystemAccessRule rule in dSecurity.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
{
    Console.WriteLine("Account:{0} ({1}", rule.IdentityReference.Value,
    rule.FileSystemRights.ToString() + ")");
}

我在两个不同的共享驱动器上运行它们,这些驱动器应该是相同的,以便比较结果,但输出文件乱序且难以比较。

如何按字母顺序对结果进行排序?

2 个答案:

答案 0 :(得分:1)

您可以使用LINQ&#39; IdentityReference.Value并按var orderedResults = dSecurity.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)) .Cast<FileSystemAccessRule>() .OrderBy(rule => rule.IdentityReference.Value); 订购,因为这似乎是您在屏幕上显示的内容。但首先你需要投射集合。

foreach

然后在orderedResults循环中循环foreach (FileSystemAccessRule rule in orderedResults)

 private function  check_destination_delivered($request,$id,$order)
{
    if ($request->get('status') == 'destination_delivered')
    {
      $this->destination_verification($request);
      DB::beginTransaction();
      try
      {
        $this->calculate_credit($id,$order);
        $this->calculate_customer_gift_credit($id,$order);
        DB::commit();
      }
      catch (\Exception $e)
      {
        DB::rollback();
        return $this->respondUnprocessable(1180,'error', $e);
      }
    }
}

答案 1 :(得分:0)

通过Linq将foreach的输出转换为列表,或者添加到列表中,然后按降序排序。我实际上使用下面的内容返回在共享中找到的DIR的有序列表。

ObjRef.ToList()。OrderByDescending(x =&gt; x.Name).ToList()