0

後で変更を比較するために使用できるように、レジストリのすべてを文字列形式でツリー構造に取り込もうとしています。これまでのところ、レジストリ内のサブキーがいくつの子を持つことになるかについて確信が持てないため、実際にツリー構造に子を動的に追加することで行き詰まりました! または、それが持つ値の数なので、子が何人になるかを知らなくても、ツリー構造を動的に設定できる必要があります。

これまでのところ、私はこれを持っています:

    private void buildRegistryListTreeFromScratch(string[] rootSubs) {
        //The rootSubs argument is the first layer of subkeys directly underneath the root keys
        RegistryKey rootKey = Registry.CurrentUser;

        registryTreeTracker.Name = "Current User";

        for (int i = 0; i < rootSubs.Length; i++) {
            registryTreeTracker.Children.Add(new RegistryTreeNode(rootSubs[i]));
        }

        for (int i = 0; i < rootSubs.Length; i++) {
            RegistryKey selectedKey = rootKey.OpenSubKey(rootSubs[i]);
            if (selectedKey.SubKeyCount > 0) {
                subKeyBelow(rootSubs[i]);
            }
        }

    }

    private void subKeyBelow(string path) {
        RegistryKey rootKey = Registry.CurrentUser;
        RegistryKey selectedKey = rootKey.OpenSubKey(path);

        for (int i = 0; i < registryTreeTracker.Children.Count; i++){
            if (registryTreeTracker.Children[i].Name == path) {
                registryTreeTracker.Children[i] ... //This is the impasse I have reached
            }
        }
    }

オブジェクト registryTreeTracker に使用しているクラスは、これに関連する質問で Daniel Hilgarth から提供されたクラスであり、その定義は次のとおりです。

public class RegistryTreeNode {
    private readonly List<RegistryTreeNode> _children = new List<RegistryTreeNode>();

    public RegistryTreeNode(string name, params RegistryTreeNode[] children) {
        Name = name;
        _children.AddRange(children);
    }

    public List<RegistryTreeNode> Children {
        get {
            return _children;
        }
    }
    public string Name {
        get;
        set;
    }
}
4

2 に答える 2