lima-city: Webhosting, Domains und Cloud
0 Pluspunkte 0 Minuspunkte

Ich habe eine Funktion zum auslesen der erweiterten NTFS Berechtigungen.

private static List<string> GetDetailedRights(FileSystemRights rights)
{

    List<string> detailedRights = new List<string>();

    foreach (FileSystemRights value in Enum.GetValues(typeof(FileSystemRights)))
    {

        if (value == 0) continue; // Ignore 'None'

        if (rights.HasFlag(value))
        {
            detailedRights.Add(value.ToString());
        }

    }

    return detailedRights;

}

So rufe ich die Funktion auf:

List<string> detailedRightsList = GetDetailedRights(rule.FileSystemRights);
string detailedRights = string.Join(", ", detailedRightsList);

In der Ausgabe sind manche Rechte aber doppelt.

ReadData, ReadData, CreateFiles, CreateFiles, AppendData, AppendData, ReadExtendedAttributes, WriteExtendedAttributes, ExecuteFile, ExecuteFile, ReadAttributes, WriteAttributes, Write, ReadPermissions, Read, ReadAndExecute, Synchronize

Wie kann ich machen das jede Berechtigung nur einmal angezeigt wird?

bezieht sich auf eine Antwort auf: Erweiterte NTFS Berechtigungen anzeigen
von  

2 Antworten

0 Pluspunkte 0 Minuspunkte

Du kannst die Methode Distinct() auf das List<> Element anwenden.

string detailedRights = string.Join(", ", detailedRightsList.Distinct());
von (902 Punkte)  
0 Pluspunkte 0 Minuspunkte

Manche Rechte wie Read, ReadAndExecute, Write usw. sind kombinierte Flags, die aus mehreren Einzelrechten bestehen. Beim Iterieren mit HasFlag trifft das also mehrfach auf die gleichen Einzelrechte zu, weil z. B. ReadAndExecute auch Read, ExecuteFile usw. enthält. Du kannst statt einer List<string> ein Hashset<string> erstellen.

private static List<string> GetDetailedRights(FileSystemRights rights)
{
    HashSet<string> detailedRights = new HashSet<string>();

    foreach (FileSystemRights value in Enum.GetValues(typeof(FileSystemRights)))
    {
        if (value == 0) continue; // Ignore 'None'

        if (rights.HasFlag(value))
        {
            detailedRights.Add(value.ToString());
        }
    }

    return detailedRights.ToList();
}

Dadurch wird jede Berechtigung nur einmal angezeigt.

von (1.1k Punkte)