获得意想不到的“?”在注册表GetValue的末尾

时间:2010-06-03 14:12:02

标签: c# registry

我使用Registry类来管理C#中Windows 7上的注册表中的值。

Registry.GetValue(...);

但是,我正面临一种奇怪的行为: 每次返回的值都是正确的值,但有时会出现意外的“?”

当我检查注册表,(注册表)时,“?”不存在。 我真的不明白这个问号来自哪里。

信息:

  • C#
  • 3.5框架
  • Windows 7 64位(我希望我的应用程序能够在32位和64位系统上工作)

3 个答案:

答案 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问题。 我仍然不明白为什么有时会出现这个字符。