所以我正在编写一些代码并使用RegistryKey.GetValue
,我似乎无法让它返回正确的字符串数组。我会使用 RegSaveKeyEx,除非我需要在我正在创建的 reg 文件中更改密钥的保存位置。
我正在查询的 MultiString 有两行:
和一个空行。Regedit 为hex(7):3a,00,00,00,00,00
所述值的 reg 文件导出提供。这是对的。3a 将是:
,然后是一个空值,两个空值用于空行,最后两个空值表示值的结束。我的代码是给hex(7):3a,00,00,00
,这将是:
多字符串上的 a 和双空 EOL 字符。当导入回注册表时hex(7):3a,00,00,00
只有一个:
,空行丢失。
如果我导入hex(7):3a,00,00,00,00,00
然后在 regedit 中查看值,我会看到:
一个空行。这是正确的,这就是我希望我的代码执行的操作。
当我RegistryKey.GetValue
在 C# 4.0 中查询这个值时,我得到的 astring[]
只有一个元素,:
.
对于其他 MultiString 值,我得到一个包含每一行元素的数组,正如我所期望的那样。
RegistryKey.GetValue
不会为空行返回任何内容。它不返回空值,数组中的空白字符串,什么都没有。
在除空行之外的所有内容上,它都返回与 regedit 导出完全相同的结果。需要改变什么让它返回一个包含空行的数组?
如果有帮助,这是我的代码:
private static string RegMultiStringExtraction(RegistryKey UsersSubKey, string Key)
{
string[] InputStrs = (string[])UsersSubKey.GetValue(Key, Environment.NewLine, RegistryValueOptions.DoNotExpandEnvironmentNames);
StringBuilder sb = new StringBuilder();
foreach (string str in InputStrs)
{
char[] Values = str.ToCharArray();
foreach (char letter in Values)
{
int ValueInt = Convert.ToInt32(letter);
sb.Append(ValueInt.ToString("x"));
sb.Append(",00,");
if (Values.Length == 0)
{
if (sb.Length == 0)
{
sb.Append("00,");
}
else if (sb.Length > 1)
{
sb.Append(",00,");
}
}
}
sb.Append("00,00,");
}
string Value = ('"' + Key.ToString() + @"""=" + "hex(7):" + sb.ToString().TrimEnd(','));
return Value;
}