如何将新字符串添加到REG_MULTI_SZ类型的注册表项?

sag*_*gar 6 .net c# windows registry

我有1个REG_MULTI_SZ类型的注册表项.此条目已包含一些字符串.

现在我想通过使用.net类添加1个字符串RegistryKey.这个类有方法key.SetValue(string,string).但是当我使用这个方法时,它会删除已经存在的所有字符串,然后插入新的字符串,简而言之就是覆盖它.我不想触摸已经存在的字符串,只想在最后添加新的字符串.有人知道我们怎么能在C#中做到这一点.

Vin*_*agi 11

对于多字符串值,我会这样做.

key.SetValue("MultipleStringValue", new string[] {"One", "Two", "Three"});
Run Code Online (Sandbox Code Playgroud)

如果它是单个值,那么沃尔夫冈提到你应该阅读现有的并追加.


小智 6

根据上面 Vinayak 的回答,如果您想附加一个值,您需要读取现有值并使用它。

所以:

var registryValue = key.GetValue("KeyName");
Run Code Online (Sandbox Code Playgroud)

获取现有值,该值应返回 REG_MULTI_SZ 的字符串数组。然后只需附加新值(或者交换现有值,如果您愿意的话)。您可以按照您喜欢的任何方式执行此操作 - 从数组创建一个列表并向其添加新值,使用循环创建一个新的字符串数组,使用 IEnumerable.Concat...

var stringList = new List<string>(registryValue as string[]);
stringList.Add("NewValue");
key.SetValue("KeyName", stringList.ToArray());
Run Code Online (Sandbox Code Playgroud)

显然,您希望在这个小示例周围放置一些防御性编码 - 确保您实际上返回的是字符串数组等......