Это не совсем сработало для меня, я тоже получал случайный выбор? в конце значения из реестра, который был путь к файлу. Это только появлялось время от времени. Это похоже на ошибку.
Я использую метод 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;
}
}