我使用Registry类来管理C#中Windows 7上的注册表中的值。
Registry.GetValue(...);
但是,我正面临一种奇怪的行为: 每次返回的值都是正确的值,但有时会出现意外的“?”
当我检查注册表,(注册表)时,“?”不存在。 我真的不明白这个问号来自哪里。
信息:
答案 0 :(得分:1)
这对我来说不太合适,我也随机了?在作为文件路径的注册表的值的末尾。它只是时不时出现。这似乎是一个错误。
我使用2 pass方法查看目录是否存在然后删除字符,最后我得到unicode字符1792。 < 128可能不适用于某些语言。
string configPath = val.ToString();
bool dirExists = false;
if (Directory.Exists(configPath))
{
dirExists = true;
}
else
{
_logger.Warn("The path for service {0} doesn't exist: {1}", serviceName, configPath);
StringBuilder configPathBuilder = new StringBuilder(configPath.Length);
// Do this to remove any dodgy characters in the path like a ? at end
char[] inValidChars = Path.GetInvalidPathChars();
foreach (Char c in configPath.ToCharArray())
{
if (inValidChars.Contains(c) == false && c < 128)
{
configPathBuilder.Append(c);
}
else
{
_logger.Warn("An invalid path was character was found in the path: {0} {1}", c, (int)c);
}
}
configPath = configPathBuilder.ToString();
if (Directory.Exists(configPath))
{
dirExists = true;
}
}
答案 1 :(得分:0)
所以我的问题是,“谁设定了价值”?
也许做过该设置的人在字符串的末尾添加了一个不可打印的字符。它可能实际上不是问号。这可能是程序中出现设置错误的结果,而不是与代码有任何关系。
答案 2 :(得分:0)
由于你的所有评论,我找到了一种删除意外字符的方法;)
String value = null;
try
{
foreach (Char item in Registry.GetValue(registryKey, key, "").ToString().ToCharArray())
{
if (Char.GetUnicodeCategory(item) != System.Globalization.UnicodeCategory.OtherLetter && Char.GetUnicodeCategory(item) != System.Globalization.UnicodeCategory.OtherNotAssigned)
{
value += item;
}
}
}
catch (Exception ex)
{
LOG.Error("Unable to get value of " + key + ex, ex);
}
return value;
我做了一些测试,以了解不时会出现什么样的字符。就像你说拉里一样,这是一个unicode问题。 我仍然不明白为什么有时会出现这个字符。