Я работаю с приложением .NET 4.7.2 и проверяю пути к файлам.
Я заметил неожиданное поведение, когда входная строка содержит завершающий возврат каретки (\r).
Код: Выделить всё
string input = "C:\\Temp\\TestFolder\r";
if (input.IndexOfAny(Path.GetInvalidFileNameChars()) >= 0 ||
input.IndexOfAny(Path.GetInvalidPathChars()) >= 0)
{
// This block is NOT hit
return true;
}
try
{
var fullPath = Path.GetFullPath(input);
if (fullPath.IndexOfAny(Path.GetInvalidFileNameChars()) >= 0 ||
fullPath.IndexOfAny(Path.GetInvalidPathChars()) >= 0)
{
// This block IS hit
return true;
}
}
catch
{
return true;
}
- содержит завершающий символ \r
Код: Выделить всё
input - Первый if не возвращает true
- После вызова Path.GetFullPath(input) второй if возвращает true
- Почему нет Path.GetInvalidPathChars() обнаруживает \r в исходном вводе?
- Разве Path.GetInvalidPathChars() не предназначен для полноценного механизма проверки?
- Ожидается ли такое поведение в .NET 4.7.2 или это ошибка?
Подробнее здесь: https://stackoverflow.com/questions/798 ... put-with-r