Получать неожиданное "?" в конце реестра GetValue - PullRequest
1 голос
/ 03 июня 2010

Я использую класс Registry для управления значениями в Registry на Windows Seven в C #.

Registry.GetValue(...);

Но я столкнулся с любопытным поведением: Каждый раз возвращаемое значение является правильным, но иногда за ним следует неожиданное «?»

Когда я проверяю Реестр, (regedit), "?" не существует Я действительно не понимаю, откуда этот знак вопроса.

Информация:

  • C #
  • 3,5 рамки
  • Windows 7 64 бит (и я хочу, чтобы мое приложение работало на 32- и 64-битных системах)

Ответы [ 3 ]

1 голос
/ 05 мая 2012

Это не совсем сработало для меня, я тоже получал случайный выбор? в конце значения из реестра, который был путь к файлу. Это только появлялось время от времени. Это похоже на ошибку.

Я использую метод 2 прохода, чтобы увидеть, существует ли каталог, а затем удаляю символы, в конце я получаю символ юникода 1792. <128, вероятно, не будет работать для некоторых языков. </p>

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;
    }

}
0 голосов
/ 07 июня 2010

Я нашел способ удалить неожиданный символ, спасибо всем вашим комментариям;)

 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;

Я провел несколько тестов, чтобы узнать, какой символ появляется время от времени. Как вы и сказали, Ларри, это была проблема с юникодом. Я до сих пор не понимаю, почему этот символ появляется иногда.

0 голосов
/ 03 июня 2010

Итак, мой вопрос: «кто установил значение»?

Возможно, кто бы ни делал настройку, он помещал непечатаемый символ в конце строки. Это, вероятно, на самом деле не вопросительный знак. Это может быть результатом ошибки в программе, которая сама по себе установила настройки, а не связана с вашим кодом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...