2012-10-31 4 views
0

그래서 일부 코드를 작성하고 RegistryKey.GetValue을 사용하고 적절한 문자열 배열을 반환 할 수 없습니다. 나는 내가 만들고있는 reg 파일에 키가 저장되는 위치를 변경해야한다는 것을 제외하고는 RegSaveKeyEx를 사용할 것이다.C# RegistryKey.GetValue는 빈 줄을 반환하지 않습니다.

내가 쿼리하는 MultiString에는 두 줄의 :과 빈 줄이 있습니다. Regedit는 상기 값의 reg 파일 내보내기에 대해 hex(7):3a,00,00,00,00,00을 제공합니다. 이 말이 맞습니다. 3a는 :이고, 공백 행에는 널 (null) 2 개가, 값의 끝을 나타 내기 위해 널 (null) 2 개가 추가됩니다. 내 코드 hex(7):3a,00,00,00, : 및 Multi-null EOL 문자가 될 줄 것입니다. 레지스트리에 다시 가져올 때 hex(7):3a,00,00,00:이고 빈 줄은 없습니다.

hex(7):3a,00,00,00,00,00을 가져온 다음 regedit에 값을 보면 :과 빈 줄이 나타납니다. 이것은 정확하며 이것은 내 코드가 수행하기를 원하는 것입니다.

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

더블 널 (null)로 종료되는 문자열은 빈 줄을 포함 할 수 없습니다. 빈 행을 포함시키려는 시도는 두 개의 연속 null을 포함하는 것을 의미하며 이는 빈 행보다는 종료로 해석됩니다. Raymond Chen discussed this quirk 나는 훨씬 더 웅변 적으로 할 수있다.

아마도 REG_SZ에 저장하고 Environment.NewLine을 구분 기호로 사용할 수 있습니다.

+0

regedit 내보내기는 빈 줄이 포함 된 출력으로 hex (7) : 3a, 0000000000을 제공합니다. 또한 가져올 수 있으며 가져 오기 작업을 수행하면 내보내기 파일에 반드시 표시해야하는 빈 줄이 포함 된 MultiString을 만들 수 있습니다. –

+0

원하는만큼 많은 null을 지정할 수 있습니다. 파서가 연속적으로 두 개를 만나면 목록이 종료 된 것으로 간주합니다. –

+0

또한 내 질문에 regedit 내보내기 hex (7) : 3a, 0000000000 (작동) 값으로 제공하고 RegistryKey.GetValue 경우에만 비어있는 줄에 대한 배열 요소를 제공합니다. MultiString. regedit가 이중 null을 포함하는 .reg 파일을 만들 수있는 경우 RegistryKey.GetValue에 MultiString에 해당 줄의 요소가있는 이유는 무엇입니까? –

관련 문제