2017-01-17 60 views
0

我有下面的代碼,以獲得一個共享驅動器中的文件夾的權限:訂購Directory.GetAccessControl.GetAccessRules字母

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() + ")"); 
} 

我運行它,都應該是相同的,比較兩個不同的共享驅動器結果但輸出文件無序且難以比較。

如何按字母順序排列結果?

+0

「按字母順序」,如在什麼意義?文件名?驅動器名稱? – Ian

回答

1

您可以通過IdentityReference.Value使用LINQ的OrderBy和秩序,這似乎是您要顯示在屏幕上的內容。但首先你需要投射這個集合。

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) 
0

通過Linq將您的foreach的輸出轉換爲列表或添加到列表,然後按降序排列。我實際上使用下面的內容來返回在共享上找到的DIR的有序列表。

ObjRef.ToList()。OrderByDescending(X => x.Name).ToList()