2017-01-17 2 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

Вы можете использовать LINQ в OrderBy и порядок в 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) 
0

Конвертировать вывод вашего foreach в список через Linq или добавить его в список, а затем упорядочить по убыванию. Фактически я использую приведенное ниже, чтобы вернуть упорядоченный список DIR, найденный на общем ресурсе.

ObjRef.ToList(). OrderByDescending (х => x.Name) .ToList()

Смежные вопросы