如何在C#中添加嵌套的注册表键/值?

Ass*_*saf 6 .net c# registry

给定注册表路径"\ a\b\c\d",我想为键'd'添加一个值.问题是 - 我不知道a,b或c是否存在,并且我希望代码在它们不存在时生成它们.有没有快速的方法(使用一些我没见过的.NET方法)来做到这一点?我可以通过注册表键迭代的路径并使用OpenSubKey/GetValue/SetValue方法来执行该过程,但是如果可以的话,我希望避免重新发明轮子...

注意:我正在寻找的行为与运行.reg文件所获得的行为相同(它将创建必要的子键).

谢谢,

阿萨夫

Jam*_*ing 15

我不知道你可以做一个内置的单一电话.但是,您不需要调用OpenSubKey/GetValue等.调用CreateSubKey将创建新密钥,或者打开现有密钥(如果存在).

RegistryKey regKey = startingRootKey;
string[] RegKeys = pathToAdd.split('\'');
foreach (string key in RegKeys) {
    regKey = regKey.CreateSubKey(key);
}
regKey.SetValue("ValueName", "Value");
Run Code Online (Sandbox Code Playgroud)

忽略那里的额外',我需要它来使格式看起来正确.??

此外,确保在执行注册表项添加时测试异常...有很多安全性和路径方面可能出错.陷阱的例外列表在这里.


EDIT
I'm making this too complicated! I just tested... the following will do exactly what you want:

RegistryKey regKey = startingRootKey;
regKey = regKey.CreateSubKey(@"a\b\c\d");
regKey.SetValue("ValueName", "Value");
regKey.Close();
Run Code Online (Sandbox Code Playgroud)

It's smart enough to parse the nested path. Just make sure you have the @ symbol, or it will treat the string is as if it were escaped.

  • 有趣的是,评论中除尘的内容。13 年前,我更喜欢让答案中的代码尽可能简单,以专注于要回答的问题。现在,是的,我可能也会将代码包装在 using 语句中以展示最佳实践。 (2认同)