所以我寫了一些代碼,並使用RegistryKey.GetValue
,我似乎無法得到它返回正確的字符串數組。我會使用RegSaveKeyEx,除非我需要更改密鑰保存在我創建的reg文件中的位置。C#RegistryKey.GetValue不返回空行
我查詢的MultiString有兩條線,:
和一個空行。 Regedit爲hex(7):3a,00,00,00,00,00
提供所述值的reg文件導出。這是對的。 3a將是:
,然後爲零空白行,最後再有兩個空值表示值的結尾。我的代碼給出hex(7):3a,00,00,00
,這將是一個:
和MultiString上的雙零EOL字符。當導入回註冊表hex(7):3a,00,00,00
只是一個:
,空行缺失。
如果我導入hex(7):3a,00,00,00,00,00
然後查看註冊表中的值,我看到:
和一個空行。這是正確的,這是我想要我的代碼做的。
當我在C#4.0中用RegistryKey.GetValue
查詢這個值時,我得到一個string[]
只有一個元素:
。
對於其他MultiString值,我得到一個包含每行的元素的數組,如我所期望的。
RegistryKey.GetValue
不會爲空行返回任何內容。它不會在數組中返回null,空白字符串,也不會返回任何內容。
除了空白行之外的所有內容都返回與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;
}
這就是事情,註冊表輸出給出十六進制(7):3a,00,00,00,00,00作爲輸出,其中包含一個空行。它也可以導入,並且導入也可以工作,創建MultiString,它確實包含導出文件將顯示它應該的空行。 –
只要你想要,你可以在那裏粘貼儘可能多的空值。一旦解析器連續遇到兩個,它認爲該列表已被終止。 –
此外,我的問題是爲什麼註冊表輸出給十六進制(7):3a,00,00,00,00,00作爲值(其工作)和RegistryKey.GetValue只給出非空行的數組元素MultiString。如果註冊表可以創建一個包含雙null的.reg文件,爲什麼RegistryKey.GetValue在MultiString中甚至沒有該行的元素? –