그래서 일부 코드를 작성하고 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;
}
regedit 내보내기는 빈 줄이 포함 된 출력으로 hex (7) : 3a, 0000000000을 제공합니다. 또한 가져올 수 있으며 가져 오기 작업을 수행하면 내보내기 파일에 반드시 표시해야하는 빈 줄이 포함 된 MultiString을 만들 수 있습니다. –
원하는만큼 많은 null을 지정할 수 있습니다. 파서가 연속적으로 두 개를 만나면 목록이 종료 된 것으로 간주합니다. –
또한 내 질문에 regedit 내보내기 hex (7) : 3a, 0000000000 (작동) 값으로 제공하고 RegistryKey.GetValue 경우에만 비어있는 줄에 대한 배열 요소를 제공합니다. MultiString. regedit가 이중 null을 포함하는 .reg 파일을 만들 수있는 경우 RegistryKey.GetValue에 MultiString에 해당 줄의 요소가있는 이유는 무엇입니까? –