2012-10-31 77 views
0

所以我寫了一些代碼,並使用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; 
    } 

回答

2

雙空終止字符串不能包含空行。試圖包含空行意味着包含兩個連續的空值,並且將其解釋爲終止而不是空行。 Raymond Chen discussed this quirk更有說服力,我可以。

也許你可以保存到REG_SZ並使用Environment.NewLine作爲分隔符。

+0

這就是事情,註冊表輸出給出十六進制(7):3a,00,00,00,00,00作爲輸出,其中包含一個空行。它也可以導入,並且導入也可以工作,創建MultiString,它確實包含導出文件將顯示它應該的空行。 –

+0

只要你想要,你可以在那裏粘貼儘可能多的空值。一旦解析器連續遇到兩個,它認爲該列表已被終止。 –

+0

此外,我的問題是爲什麼註冊表輸出給十六進制(7):3a,00,00,00,00,00作爲值(其工作)和RegistryKey.GetValue只給出非空行的數組元素MultiString。如果註冊表可以創建一個包含雙null的.reg文件,爲什麼RegistryKey.GetValue在MultiString中甚至沒有該行的元素? –