だから私はいくつかのコードを書いて使用RegistryKey.GetValue
していますが、適切な文字列配列を返すことができないようです。作成しているregファイルでキーが保存されている場所を変更する必要がある場合を除いて、RegSaveKeyExを使用します。
クエリしている MultiString には、2 行:
と空白行があります。Regeditはhex(7):3a,00,00,00,00,00
、上記の値のregファイルエクスポートを提供します。正解です。3a は:
、次にヌル、空白行の 2 つのヌル、最後にさらに 2 つのヌルで値の終わりを示します。私のコードは、MultiString のhex(7):3a,00,00,00
a:
と double-null EOL 文字になります。レジストリにインポートし直すhex(7):3a,00,00,00
と:
、空白行がなくなります。
インポートhex(7):3a,00,00,00,00,00
してから regedit で値を表示する:
と、空白行が表示されます。これは正しく、これが私のコードで実行したいことです。
RegistryKey.GetValue
C# 4.0 でこの値をクエリするとstring[]
、要素が 1 つだけの a が取得され:
ます。
他の MultiString 値については、予想どおり、すべての行の要素を含む配列を取得します。
RegistryKey.GetValue
空白行に対しては何も返しません。null、配列内の空白文字列、何も返しません。
空白行を除くすべてで、regedit export とまったく同じ結果が返されます。空白行を含む配列を返すには、何を変更する必要がありますか?
これが役立つ場合の私のコードは次のとおりです。
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;
}