Ich entwickle gerade eine Anwendung, die den Namespace System.DirectoryServices verwendet, um ein DirectoryEntry-Objekt zu erstellen und die gesamte Hierarchie durchzuziehen, um Informationen zu sammeln.Looping durch DirectoryEntry oder eine beliebige Objekthierarchie - C#
Ich weiß nicht, Anzahl der untergeordneten Einträge für jedes Directory Objekt in der Hierarchie, so kann ich nicht eine Anzahl von N verschachtelten Schleifen Spinnen durch die Kinder Eigentum
Hier ist mein Pseudo-Code-Beispiel erstellen:
//root directory
DirectoryEntry root = new DirectoryEntry(path);
if(DirectoryEntry.Childern != null)
{
foreach(DirectoryEntry child in root.Children)
{
//loop through each Children property unitl I reach the last sub directory
}
}
Meine Frage ist, was ist der beste Weg, um eine Schleife zu erstellen, um Informationen zu sammeln, wenn Sie so nicht die Anzahl der Unterverzeichnisse in Ihrem Objekt wissen?
(Dies kann auf jede Art von Objekt angewendet werden, die Sie nicht die Objekthierarchie weiß)
Dies, btw, ist ein gutes Beispiel dafür, wo Rekursion ist eigentlich ein guter Weg, um ein Problem zu behandeln. Da das Dateisystem selbst Tiefeneinschränkungen auferlegt, sollten Sie den Stapel nicht blasen. Sie müssen jedoch vorsichtig sein, falls es eine Schleife in der Baumstruktur zu Links gibt ... –
@jeffmaphone: DirectoryEntry wird tatsächlich auf einen LDAP-Server zeigen, nicht auf das Dateisystem. Ich bin mir nicht sicher über die LDAP-Tiefengrenzen, aber wenn es Schleifen gibt, ist es am einfachsten, die GUID jedes von Ihnen besuchten Eintrags aufzuzeichnen und die Rekursion zu beenden, wenn Sie denselben Eintrag zweimal besuchen. –
Verwenden Sie 'using (child) {...}' innerhalb der foreach-Schleife, um sicher zu sein, nach sich selbst zu bereinigen. siehe http://stackoverflow.com/questions/41378746/disposing-during-foreach/41378945#41378945 – Born2Smile