2012-07-24 64 views
3

我有1个REG_MULTI_SZ类型的注册表项。此条目已包含一些字符串。如何将新字符串添加到REG_MULTI_SZ类型的注册表项?

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

回答

6

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

key.SetValue("MultipleStringValue", new string[] {"One", "Two", "Three"}); 

如果它是一个单一的值,那么沃尔夫冈提到你应该读取现有的和附加的。

+0

如果我提到单个字符串,那么它会覆盖旧的值,并且reg条目转换为类型REG_SZ – sagar 2012-07-24 11:42:39

+0

key.SetValue(“MultipleStringValue”,new string [] {“One”});你应该传递一个单个字符串的数组。 – 2012-07-24 11:52:28

+0

我检查了这一点,但仍然取代旧值 – sagar 2012-07-24 11:55:36

1

没有其他办法。您必须先读取现有字符串,然后将字符串附加到该字符串,然后再写入新的连接字符串。

+0

谢谢,但即时通讯寻找其他可能的方式。 – sagar 2012-07-24 11:57:39

2

按照上面的Vinayak的回答,如果你想附加一个值,你需要读入现有的值并使用它。

所以:

var registryValue = key.GetValue("KeyName"); 

获得现有的值,它应该返回一个字符串数组为REG_MULTI_SZ。那么这只是一个附加新值的问题(或者换一个现有的值,如果这是你的想象)。你可以这样做你喜欢的任何方式 - 创建数组列表,并添加一个新的值给它,创建一个循环的新字符串数组,利用IEnumerable.Concat的...

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

显然你'd想要在这个小样本周围放一些防御性编码 - 确保你实际上找回了一个字符串数组等等......

+0

谢谢,我已经知道了。我正在寻找其他可能的方式 – sagar 2012-07-24 13:18:51

+0

我不认为有另一种可能的方式,至少不使用注册表类。您始终可以推出自己的注册表访问库,或者创建一种扩展方法,以便在一次调用中有效地完成此操作。 – 2012-07-24 13:29:20

相关问题