0

だから私はいくつかのコードを書いて使用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,00a:と double-null EOL 文字になります。レジストリにインポートし直すhex(7):3a,00,00,00:、空白行がなくなります。

インポートhex(7):3a,00,00,00,00,00してから regedit で値を表示する:と、空白行が表示されます。これは正しく、これが私のコードで実行したいことです。

RegistryKey.GetValueC# 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;
    }
4

1 に答える 1

2

二重ヌル終了文字列には空行を含めることはできません。空行を含めようとすると、2 つの連続する null が含まれることになり、空行ではなく終了と解釈されます。Raymond Chenは、私ができるよりもずっと雄弁にこの癖について説明しました。

おそらく、区切り文字として保存しREG_SZて使用できます。Environment.NewLine

于 2012-10-31T19:49:50.497 に答える